2013-05-08 7 views
26

私は本質的に2つの主な方法があるプロジェクトを持っています。 1つはテスト用、もう1つはコードを実行するためのものです。 通常はサブモジュールを作成しますが、これはオプションではありません。特定のファイルをcmakeビルドから削除する

file(GLOB sources "*.cpp") 
file(GLOB headers "*.h") 
add_executable(testing ${sources} ${headers}) 
add_executable(main ${sources} ${headers}) 

したがって、main.cppを除くすべてのソースをコンパイルする必要があります。 メインはtesting.cpp以外のすべてをコンパイルする必要があります。

答えて

42

通常の方法は、main.cppとtesting.cpp以外のすべてのソースからライブラリを作成し、これを各実行可能ファイルにリンクすることです。しかし、サブモジュールを作成できないと言ったときには、そうすることができないと思います。

代わりに、あなたはlist(REMOVE_ITEM ...)コマンドを使用することができます。

file(GLOB sources "*.cpp") 
file(GLOB headers "*.h") 
set(testing_sources ${sources}) 
list(REMOVE_ITEM testing_sources ${CMAKE_CURRENT_SOURCE_DIR}/main.cpp) 
list(REMOVE_ITEM sources ${CMAKE_CURRENT_SOURCE_DIR}/testing.cpp) 
add_executable(main ${sources} ${headers}) 
add_executable(testing ${testing_sources} ${headers}) 
+0

は、この仕事をしていますか? 'リストのサブコマンドREMOVE_ITEMがリストを表示する必要があります。'というエラーがcmake 3.5.0、windows 10に上記のコードで表示されます。 –

+3

はい、これはCMake 3.5.0で動作します。おそらくエラーメッセージが表示されていると、あなたのリストを参照解除しています(例えば 'list(REMOVE_ITEM sources ...)'ではなく 'list(REMOVE_ITEM $ {sources} ...)') 。 – Fraser

関連する問題