2013-05-08 13 views
26

Ho un progetto in cui ho essenzialmente due metodi principali. Uno per i test e uno per, beh, l'esecuzione del codice. Normalmente si dovrebbero creare sottomoduli, ma questa non è un'opzione.Rimuovere il file specifico da cmake build

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

Quindi il test deve compilare tutte le origini tranne main.cpp. Main dovrebbe compilare tutto tranne testing.cpp.

risposta

42

Il modo più normale sarebbe probabilmente per creare una libreria da tutte le fonti tranne main.cpp e testing.cpp, poi collegare questo ad ogni eseguibile. Tuttavia, immagino tu voglia dire che non puoi farlo quando dici che non puoi creare sottomoduli.

Invece, è possibile utilizzare il comando 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

funziona? Perche' io ottengo 'elenco sub-comando remove_item richiede list per essere errore present.' sotto CMake 3.5.0, Windows 10 con il codice di cui sopra. –

+3

Sì, funziona con CMake 3.5.0. Probabilmente dato il messaggio di errore, hai sia "dereferenziato" la vostra lista (ad esempio fatto 'Lista (remove_item $ {} fonti ...)' invece di 'lista (fonti remove_item ...)'), o il vostro elenco è vuoto . – Fraser

Problemi correlati