2013-05-08 589 views
26

我有一個項目,其中我基本上有兩個主要的方法。一個用於測試,另一個用於運行代碼。 通常你會創建子模塊,但這不是一個選項。從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與上面的代碼。 – 2016-05-09 11:54:04

+3

是的,這可以在CMake 3.5.0下運行。可能給出了你的錯誤信息,你要麼「取消引用」你的列表(例如完成list(REMOVE_ITEM $ {sources} ...)而不是'list(REMOVE_ITEM sources ...)'),否則你的列表是空的。 – Fraser 2016-05-10 00:08:02