2013-05-08 17 views
26

Mam projekt, w którym mam zasadniczo dwie główne metody. Jeden do testowania i drugi do noszenia kodu. Zwykle tworzysz submoduły, ale nie jest to możliwe.Usuń konkretny plik z cmake build

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

Zatem testowanie powinno polegać na kompilacji wszystkich źródeł z wyjątkiem main.cpp. Główny powinien skompilować wszystko oprócz testing.cpp.

Odpowiedz

42

Normalnym sposobem byłoby prawdopodobnie utworzenie biblioteki ze wszystkich źródeł oprócz main.cpp i testing.cpp, a następnie połączenie jej z każdym plikiem wykonywalnym. Sądzę jednak, że masz na myśli, że nie możesz tego zrobić, kiedy mówisz, że nie możesz tworzyć submodułów.

Zamiast tego można użyć polecenia 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

to działa? Bo dostaję pod-komendę "lista REMOVE_ITEM wymaga obecności listy." Błąd pod cmake 3.5.0, Windows 10 z powyższym kodem. –

+3

Tak, działa to pod CMake 3.5.0. Prawdopodobnie biorąc pod uwagę twój komunikat o błędzie, masz albo "dereferencje" na twojej liście (np. Gotowe 'lista (REMOVE_ITEM $ {sources} ...)' zamiast 'list (REMOVE_ITEM źródła ...)'), albo twoja lista jest pusta . – Fraser