2012-03-12 30 views
1

CMakeを使用してVisual Studio 2008の下にプロジェクトを設定しました。このプロジェクトでは、「デバッグ」、「リリース」、「テスト」の3つのビルド構成があります。私のすべてのC++ファイルは、その機能(モデル、ビュー、コントローラ、...)に従って複数のディレクトリに分かれています。 1つのディレクトリは "test"と呼ばれ、構成 "test"専用のファイルを含んでいます。CMake:特定のビルド構成のディレクトリを除外する方法は?

私がCMakeと関係があるのは、構成が「テスト」の場合はすべてのディレクトリにあるファイルをコンパイルし、構成が「デバッグ」または「リリース」の場合はディレクトリ「テスト」を除外することです。 。

+1

'if(CMAKE_BUILD_TYPE STREQUAL" test ")'で 'add_subdirectory(test)'をラップしてみましたか? – arrowd

+0

@arrowdodger。 CMAKE_BUILD_TYPEを有効にすることをお勧めします。残念なことに、マルチコンフィギュレーションジェネレータでは、これはcmakeによって実際には使用されません(コマンドラインでCmakeに明示的に指定されている場合を除く)。 –

+0

ターゲットではなく3つの構成があることを意味しますか? CMakeのターゲットは、 'ADD_LIBRARY'、' ADD_EXECUTABLE'などで追加したライブラリやexeです。 – Fraser

答えて

1

残念ながら、現時点では、Visual Studioの[ビルドから除外]機能を制御するプロパティが不足しているため、これは不可能です。 CMakeのEXCLUDE_FROM_ALLがありますが、あなたのシナリオではあまりにも粗すぎます。

これを達成しようとするCMakeメーリングリストにはa hackがありますが、それは確かにかなりの解決策ではありません。

最も簡単な方法は、おそらくテストソースにプリプロセッサガードを使用し、 "テスト"プロファイルに対してそれぞれのプリプロセッサフ​​ラグを定義することです。あなたのCMakeListsでは各ソースファイルで

set_property(DIRECTORY test 
       APPEND PROPERTY COMPILE_DEFINITIONS_TEST DO_THE_TESTS 
      ) 

#ifdef DO_THE_TESTS 
    ... 
#endif 
+0

ハックは私が避けようとしているものです。私は一瞬使っていますが、私はそれを嫌いです。さらに、私のプロジェクトのために定義されている構造は、企業のアプローチになるはずです。 –

1

通常「テスト」は、対象または対象ではなく、ビルド構成になります。

あなたのテスト設定では、ほとんどの設定がDebugまたはReleaseからコピーされると思います。つまり、リリースコードをテストしているため(効果的にデバッグする能力を失っている)、デバッグコードをテストしています(つまり、あなたがリリースしようとしているコードを実際にテストします)。

"tests"がCMakeターゲットの場合は、デバッグまたはリリースモードでビルドして実行できます。これは、モデル、ビュー、およびコントローラを備えるターゲットは、あなたがそれを行う場合は、あらかじめなど

ADD_LIBRARY(ModelLib ...)を使用して追加したのlibsていることを前提として

SET(all_files_in_test_dir ...) 
ADD_EXECUTABLE(TestAll ${all_files_in_test_dir}) 
TARGET_LINK_LIBRARIES(TestAll ModelLib ViewLib ControllerLib ...) 

:これを行うには、私はそれはようなものになるだろうと想像しますこの方法では、2つの構成タイプだけでは、プロジェクトの構築に費やされる時間が全体的に短くなるという利点もあります。

実際にを実行する場合は、は「テスト」を設定タイプとして残したいと思っています.CommicSansMSの答えが行く方法です。

+0

こんにちは。私は "テスト"をVisual Studioの設定と見なす必要があります。しかし、私はあなたの提案に続く何かが可能かどうかを見るでしょう。ありがとう。 –

関連する問題