2012-01-26 20 views

risposta

259

CMake ha il comando add_definitions per questo scopo. Un esempio:

add_definitions(-DOPENCV_VERSION=${OpenCV_VERSION}) 
    add_definitions(-DWITH_OPENCV2) 

Anche se sembra molto specifico compilatore, funziona cross-platform a causa di qualche inganno che tutti noi conosciamo e amiamo da CMake. CMake è un sistema così squallido.

Maggiori spiegazioni sul comando qui: https://cmake.org/cmake/help/latest/command/add_definitions.html

+0

Questo funziona per me grazie =) – Mythli

126

Per fare questo per un target specifico, è possibile effettuare le seguenti operazioni:

target_compile_definitions(my_target PRIVATE FOO=1 BAR=1) 

Si dovrebbe fare questo se si dispone di più di un bersaglio che si stai costruendo e non vuoi che tutti usino le stesse bandiere.

+4

che dovrebbe essere la risposta! è più specifico e più sicuro da usare! – Gabriel

+0

Penso che questa opzione funzioni solo se vengono definiti target personalizzati. Non riesco a farlo funzionare per il target predefinito. – Mike

+0

@JimHunziker In che modo 'target_compile_definitions (my_target FIVATE FOO = 1)' diverso da 'set_source_files_properties (foo.cpp PROPERTIES COMPILE_DEFINITIONS -DFOO = 1)'? –

Problemi correlati