2013-02-14 13 views
10

私たちのCMakeビルドシステムでは、ライブラリといくつかの実行可能ファイルをビルドします。ビルド製品はすべて特定のフォルダに出力されます。cmakeで実行可能なターゲットを無効にする一般的な方法はありますか?

私はVS2010とVS2008ツールチェーンを持っていますが、VS2008ライブラリのVS2008ツールチェーンだけが必要です。出力実行ファイルは両方のツールチェーンのwin32ターゲットであるため、VS2010ツールチェーンを使用して実行可能ファイルを1回ビルドするだけで、VS2008ツールチェーンは実行可能ファイルをスキップしてビルド時間を節約する目的のライブラリのみをビルドする必要があります。

CMakeの基本スクリプトと全体的なセットアップは、今後も顧客に提供されるかもしれません。したがって、すべての実行可能ファイルのような特定のターゲットを一般的な方法で無効にする方法があるなら、さもなければ私は多くの大きなIF(BUILD_EXECUTABLES)... ENDIF()を書く必要があります。私の実行可能ファイルの設定をCMakeLists.txtに書きます。

ビルドはいくつかのバッチファイルによってトリガされます。理想的には私は、-Dオプション(例えば「=偽-D BUILD_EXECUTABLES」)を経由してcmakeのための変数を渡したい

私はADD_EXECUTABLEマクロをラップしようとしたが、私はその後、文句を言う TARGET_LINK_LIBRARIESなどの呼び出しを持っているので、それは動作しません。存在しないターゲットについて達成するためにどのように

私も後に削除することができ、いくつかのゴミフォルダに出力ディレクトリを設定し、それ(すでに述べたように)時間を構築節約しませんでした(私たちは非常に巨大なプロジェクトを持っている)

任意のアイデアそれはきれいで一般的な方法で?

答えて

18

CMakeターゲットには、ターゲットがデフォルトでビルドされているかどうかを制御する2つのプロパティがあります。最初のものはEXCLUDE_FROM_ALLです。ターゲットがデフォルトビルドターゲットから除外されているかどうかを示します。 Makefileを生成するために、makeを入力するとEXCLUDE_FROM_ALLプロパティ1.

他方がEXCLUDE_FROM_DEFAULT_BUILDであり、唯一のVisual Studio発電機に適用されるに設定されているターゲットのビルドをトリガーしません。 1に設定されている場合、 "Build Solution"メニューコマンドを呼び出すと、ターゲットはデフォルトビルドの一部になりません。

あなたはオプションBUILD_EXECUTABLESに応じて、実行可能なターゲットのための両方のプロパティの値を設定できます

if (NOT BUILD_EXECUTABLES) 
    set_target_properties(exe1 exe2 PROPERTIES EXCLUDE_FROM_ALL 1 EXCLUDE_FROM_DEFAULT_BUILD 1) 
endif() 
+0

ブリリアント、非常によく動作します。ありがとうございました。 – ecreif