2016-10-06 34 views
0

私のVisual Studioソリューションには多くのC++(Google Test)ソースファイルがあります。ビルドにはいくつかの問題を解決するだけでなく、最初の設定に戻すのに十分速く(1日に2回)戻ってください。ビルドからのファイル除外(カスタムとトランジェント)

約3つの解決策を使用しています:Visual StudioCMakeおよびQT(ただし、もう1つ追加することができます)。私はQTを使用したことがないので、私が見る他の二つの解決策は以下のとおりです。

  • Visual Studio:フォルダは無用ですが、私は、ファイルを選択し、ビルドから除外することができます。しかし、これらの変更はvcprojに保存されるので、バージョンコントロールに保存しないように注意しなければなりません。これは面倒です。
  • CMake:簡単にCMakeLists.txt(ソースフォルダーのコメント行)を変更しますが、私は常にバージョンコントロールの問題があります。カスタム(ユーザー)ファイルに除外ファイルを構成することができます。利点:私は、以前のもののように退屈ではなく、より柔軟で、ほしいものだけを生成することができます。例によって

、私はsrc_2にソースがない場合:

file(GLOB_RECURSE SRC_FILES_1 
${SOURCE_BASE_DIR}/src_1/*.cpp 
${SOURCE_BASE_DIR}/src_1/*.h 
) 

file(GLOB_RECURSE SRC_FILES_2 
${SOURCE_BASE_DIR}/src_2/*.cpp 
${SOURCE_BASE_DIR}/src_2/*.h 
) 

file(GLOB_RECURSE SRC_FILES_3 
${SOURCE_BASE_DIR}/src_3/*.cpp 
${SOURCE_BASE_DIR}/src_3/*.h 
) 

add_executable(${PROJECT_TEST_NAME} 
${SRC_FILES_1} 
# next line is commented 
# ${SRC_FILES_2} 
${SRC_FILES_3} 
) 

は、別のソリューションやここで提案されているこれらのいずれかを改善する方法はありますか?

+0

コンパイルしたくないcppファイルがありますか?時にはあなたはしますか? cmakeコマンドに追加された変数はOKですか?あなたはそれらをオン/オフに切り替えることができます。 – Hayt

+0

サンプルを追加しました。ここにサンプルを追加しました。これが挑戦です! – Liviu

答えて

1

これはcmake変数で制御できます。

option(BUILD_TESTS "builds test cpp files" ON) 

これは、cmakeファイルのオプションを追加します。この場合はデフォルトでONに変更できます。今すぐに入手することができます:あなたはBUILD_TESTSONときに作りたいものは何でも、ソースファイル、あなたのテストのソースファイルで変数を定義(またはここで

if(BUILD_TESTS) 
    set(TEST_CPP_FILES test1.cpp test2.cpp) 
endif(BUILD_TESTS) 

add_executabe(foo bar.cpp bar1.cpp $(TEST_CPP_FILES)) 

これらは、ターゲットに追加されますBUILD_TESTSがある場合。この変数オフ空になります。今

値を変更するためにあなたが再びそれらを有効にしたい場合は、

cmake <...> -DBUILD_TESTS=OFF 

またはONとを実行することができます。また、輸出自主規制の変化を保つことができますイオン制御はデフォルトでONになり、明示的に無効にする必要があるためです。

ソースファイルを除外したいだけでなく、if文でサブディレクトリまたはターゲット全体を除外することもできます。

EDIT:

それは次のようになりますあなたの例:

if(BUILD_TESTS) 
    file(GLOB_RECURSE SRC_FILES_2 
    ${SOURCE_BASE_DIR}/src_2/*.cpp 
    ${SOURCE_BASE_DIR}/src_2/*.h 
    ) 
endif(BUILD_TESTS) 

SRC_FILES_2はその後、空でなければなりません。

+0

はい、テストファイルを含む各 "フォルダ"に変数を追加して、バージョン管理の問題を解決できました。唯一の問題は、私はそれらの数十が必要であるということです。 – Liviu

+0

1つだけ変数を持つことができます。 – Hayt

+0

@Liviu私の答えはあなたの例でどのように見えるのか編集しました – Hayt

関連する問題