2012-04-03 9 views
8

私は最近QtプロジェクトをqmakeからCMakeに移植しました。 メインプログラムには#defineという指令に依存する値が含まれています。CMakeで変数の2つの異なる値を持つプログラムを構築する方法

CMakeを介して外部でdefineディレクティブを指定し、同じ実行可能ファイルの3つの異なる名前のビルドを作成したいとします。

どうすればよいですか?

私はset_target_propertiesを見ましたが、これはライブラリのみで実行可能ファイルでは機能しません。それは私が

add_executable(myAppV1 -DBUILDTYPE=1) 
add_executable(myAppV2 -DBUILDTYPE=2) 
add_executable(myAppV3 -DBUILDTYPE=3) 
を指定したい私の CMakeLists.txtに例えば BUILDTYPE "define" に基づいて3種類の味(3つの実行ファイル)にコンパイルされています次のプログラム、

int main() 
{ 

    cout << BUILDTYPE << endl; 
} 

ことを私は望ん例えば

しかしこれは正しい構文ではありません。 ヒント? と3つの実行ファイルが出力されます

答えて

9

確かにset_target_propertiesは機能しませんか?どの程度この1:

set_target_properties(myAppV1 PROPERTIES COMPILE_FLAGS "-DBUILDTYPE=1") 

か:私のマシン上で

set_target_properties(myAppV1 PROPERTIES COMPILE_DEFINITIONS "BUILDTYPE=1") 

それが動作:

add_executable(myAppV1 main.cpp) 
add_executable(myAppV2 main.cpp) 
set_target_properties(myAppV1 PROPERTIES COMPILE_DEFINITIONS "BUILDTYPE=1") 
set_target_properties(myAppV2 PROPERTIES COMPILE_DEFINITIONS "BUILDTYPE=2") 
+0

ありがとうございました! 私はadd_executable後set_target_propertiesを移動し、あなたが書いた第二版 add_executable(myAppv1 main.cppに) set_target_properties(myAppV1 PROPERTIES COMPILE_DEFINITIONS "BUILDTYPE = 1") ではなく、このよう add_executable(myAppv1でそれを使用する必要がありますmain.cpp) set_target_properties(myAppV1 PROPERTIES COMPILE_DEFINITIONS "-DBUILDTYPE = 1") – linello

0

別の方法が考えられます。

mkdir two directory 
buildflavor1 
buildflavor2 

最初のサブでディレクトリ実行:

セカンドランで
cmake -DFLAVOR=OPTION1 .. 

run cmake -DFLAVOR=OPTION2 .. 

そうで異なるコンパイルフラグと同じ名前を持つ2つの実行ファイルがように自身の機能.oです。

関連する問題