コンパイラスイッチを追加して、特定のプロジェクトの異なるバージョンをコンパイルする必要があります。通常、これを行うには、add_definitionsなどを使用します。
set_property( TARGET mylib PROPERTY COMPILE_DEFINITIONS _MYDEFINE=1 )
cMakeLists.txtファイル内。
ただし、この特定のプロジェクトではCMakeLists.txtを含むソースの変更は許可されていませんファイル。
私はそのようなものを望んでいた
cmake -D_MYDEFINE=1 <path to sources>
プリプロセッサ定義に_MYDEFINE = 1を含むプロジェクトファイル(私の場合はVisual Studio 2008ですが、重要ではありません)が生成されますが、実際には生成されません。
ここに私のオプションは何ですか?これを達成するための別のcmakeコマンドラインオプションはありますか?プロジェクトのCMakeLists.txtを変更する必要がない限り、コマンドラインを含まないソリューションを提案してください。
私は今この方法でそれを行うことができました:
次の行を共通のCMakeLists.txtに追加するようにみんなを説得することができました。
IF (NOT DEFINED _MYDEFINE)
SET(_MYDEFINE <default value>)
ENDIF()
ADD_DEFINITIONS(-D_MYDEFINE=${_MYDEFINE})
(いいえ、それは実際には「MYDEFINE」と呼ばれているわけではなく、<デフォルト値>は単なるプレースホルダーです。この例ではすべてを置き換えました)
これは、追加のコンパイラフラグなしでコンパイルする現在の動作を変更しないため、有効な変更です。
そしてそれはあなたがすることを可能にします
cmake -D_MYDEFINE=<my value> <path to sources>
このcmake定義は、cmakeがプロジェクトファイルを作成するときにC++プリコンパイラー定義にマップされます。
コンテナCMakeLists.txt
ソリューション
トリッキーなソリューション:
読み取り専用CMakeList.txt
パス:${path}/ReadOnlyProject/CMakeLists.txt
読み取り専用ライブラリの上位に新しいCMakeList.txt
を作成します(${path}/CMakeLists.txt
):
CMAKE_MINIMUM_REQUIRED(VERSION 2.8.0)
PROJECT (FAKE_PROJECT)
ADD_DEFINITIONS(-D_MYDEFINE=1)
ADD_SUBDIRECTORY(ReadOnlyProject)
次に、新しいプロジェクト(FAKE_PROJECT
)を使用してコンパイルします。 ReadOnlyProject
がコンパイラー定義を直接設定しない場合、機能する可能性があります。
Visual Studio 2010では:
c:\Users\${username}\AppData\Local\Microsoft\MSBuild\v4.0\Microsoft.Cpp.Win32.user.props
を変更して、カスタムコンパイラ設定を追加してみてください。
次のものを追加する必要があります。
<Project>
...
<ItemDefinitionGroup>
<ClCompile>
<PreprocessorDefinitions>__MYDEFINE=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
</ItemDefinitionGroup>
</Project>
CMakeソースファイルを変更せずにC++またはCプリプロセッサ定義を渡すには、Cの場合は環境変数CFLAGS
を、C++の場合はCXXFLAGS
をそれぞれ使用します。次に例を示します。
$ export CXXFLAGS="-D_MY_DEFINE=1 -D_MY_OTHER_DEFINE=1"
$ mkdir build
$ cd build
$ cmake ..