2013-02-14 8 views
10

Con il nostro sistema di build CMake costruisco alcune librerie e alcuni eseguibili. I prodotti di costruzione vengono tutti inviati a una cartella specifica.C'è un modo generico per disabilitare i target eseguibili in cmake

Ora il problema è che ho un VS2010 e un VS2008 toolchain ma ho solo bisogno della toolchain VS2008 per le librerie VS2008. Gli eseguibili di output sono target win32 per entrambi i toolchain, quindi ho solo bisogno di creare gli eseguibili una volta tramite la toolchain VS2010 mentre la toolbox VS2008 dovrebbe semplicemente saltare gli eseguibili e creare solo le librerie desiderate (che risparmia tempo di costruzione).

Il CMake script di base e configurazione globale può anche essere consegnato ai clienti in futuro in modo sarebbe molto bello se c'è un modo in CMake per disabilitare determinati obiettivi, come tutti i file eseguibili in modo generico. Altrimenti devo scrivere molti IF grandi (BUILD_EXECUTABLES) ... ENDIF() costruisce intorno al mio setup di eseguibili nel mio CMakeLists.txt, senza CMake che mi dà errori quando li dimentico.

La compilazione viene avviata tramite alcuni file batch. Idealmente voglio passare una variabile a cmake tramite l'opzione -D (ad esempio "-D BUILD_EXECUTABLES = false")

ho cercato di avvolgere le macro ADD_EXECUTABLE, ma che non funziona da quando ho chiamate come TARGET_LINK_LIBRARIES che poi si lamentano sull'obiettivo inesistente.

potrei anche impostare la directory di output per qualche cartella della spazzatura che potrebbe essere cancellato in seguito, ma che (come già detto) non permetterebbe di risparmiare tempo di costruzione (Abbiamo un progetto abbastanza abbondante)

Tutte le idee come compire in modo pulito e generico?

risposta

18

Gli obiettivi di CMake hanno due proprietà che controllano se un target viene generato per impostazione predefinita. Il primo è EXCLUDE_FROM_ALL. Indica se il target è escluso dal target di build predefinito. Per i generatori Makefile, digitando make non si innescherà una build di un obiettivo il cui EXCLUDE_FROM_ALL proprietà è impostata su 1.

L'altro è EXCLUDE_FROM_DEFAULT_BUILD e si applica solo a Studio generatori visivi. Se è impostato su 1, la destinazione non farà parte della build predefinita quando invochi il comando di menu "Build Solution".

È possibile impostare i valori di entrambe le proprietà per gli obiettivi eseguibili a seconda dell'opzione BUILD_EXECUTABLES:

if (NOT BUILD_EXECUTABLES) 
    set_target_properties(exe1 exe2 PROPERTIES EXCLUDE_FROM_ALL 1 EXCLUDE_FROM_DEFAULT_BUILD 1) 
endif() 
+0

brillante, che funziona molto bene. Grazie. – ecreif

Problemi correlati