2013-05-08 3 views
26

У меня есть проект, в котором у меня есть по существу два основных метода. Один для тестирования и один для, ну, код. Обычно вы должны создавать подмодули, но это не вариант.Удалить определенный файл из cmake build

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

Поэтому тестирование должно составлять все источники, за исключением main.cpp. Главное должно скомпилировать все, кроме test.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

Смежные вопросы