20

CMakeビルドシステムを使用して、いくつかのライブラリといくつかの実行可能ファイルをビルドします。ビルド製品はすべて特定のフォルダーに出力されます。

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

CMakeの基本スクリプトと全体的なセットアップも将来的に顧客に提供される可能性があるため、CMakeで、一般的な方法ですべての実行可能ファイルなどの特定のターゲットを無効にする方法があると非常に便利です。それ以外の場合は、 CMakeで実行可能ファイルのセットアップを忘れたときにエラーが発生することなくIF( BUILD_EXECUTABLES ) ... ENDIF()、実行可能ファイルのセットアップの周りに多くの大きな構造を作成する必要があります。CMakeLists.txt

ビルドは、いくつかのバッチファイルを介してトリガーされます。理想的には、オプションをcmake介して変数を渡したい(例)-D-D BUILD_EXECUTABLES=false

マクロをラップしようとしましたが、存在しないターゲットについて文句を言うADD_EXECUTABLEような呼び出しがあるため、機能しません 。TARGET_LINK_LIBRARIES

出力ディレクトリを後で削除できるガベージフォルダに設定することもできますが、(すでに述べたように)ビルド時間を節約することはできません。(非常に大きなプロジェクトがあります。)

クリーンで一般的な方法でそれを達成する方法についてのアイデアはありますか?

4

1 に答える 1

32

CMake ターゲットには、ターゲットがデフォルトでビルドされるかどうかを制御する 2 つのプロパティがあります。最初のものはEXCLUDE_FROM_ALLです。ターゲットがデフォルトのビルド ターゲットから除外されているかどうかを示します。Makefile ジェネレーターの場合、プロパティが 1 に設定されてmakeいるターゲットのビルドは、入力によってトリガーされません。EXCLUDE_FROM_ALL

もう 1 つはEXCLUDE_FROM_DEFAULT_BUILD、Visual Studio ジェネレーターにのみ適用されます。1 に設定すると、[ソリューションのビルド] メニュー コマンドを呼び出したときに、ターゲットはデフォルト ビルドの一部になりません。

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

if (NOT BUILD_EXECUTABLES)
   set_target_properties(exe1 exe2 PROPERTIES EXCLUDE_FROM_ALL 1 EXCLUDE_FROM_DEFAULT_BUILD 1)
endif()
于 2013-02-16T14:32:33.387 に答える