Como defino uma variável de pré-processador através do CMake?
O código equivalente seria #define foo
.
fonte
Como defino uma variável de pré-processador através do CMake?
O código equivalente seria #define foo
.
Durante muito tempo, o CMake teve o add_definitions
comando para esse fim. No entanto, recentemente o comando foi substituído por uma abordagem mais refinada (comandos separados para definições de compilação, incluem diretórios e opções do compilador).
Um exemplo usando as novas add_compile_definitions :
add_compile_definitions(OPENCV_VERSION=${OpenCV_VERSION})
add_compile_definitions(WITH_OPENCV2)
Ou:
add_compile_definitions(OPENCV_VERSION=${OpenCV_VERSION} WITH_OPENCV2)
A parte boa disso é que ele contorna as artimanhas surradas que o CMake possui para add_definitions
. O CMake é um sistema tão surrado, mas eles finalmente estão encontrando alguma sanidade.
Encontre mais explicações sobre quais comandos usar para sinalizadores de compilador aqui: https://cmake.org/cmake/help/latest/command/add_definitions.html
Da mesma forma, você pode fazer isso por alvo, conforme explicado na resposta de Jim Hunziker.
add_compile_definitions
lançaCMake Error at CMakeLists.txt:6 (add_compile_definitions): Unknown CMake command "add_compile_definitions".
. Teve que usar em seuadd_compile_options(-D <your-def>)
lugar.cmake -D CMAKE_CXXFLAGS='-DDEBUG_CHESSBOARD'
(não testado)https://cmake.org/cmake/help/v3.17/command/add_compile_definitions.html#command:add_compile_definitions
e começar a alterar o número da versão para baixo até a página desaparecer. Essa seria a versão em que ainda não existe. Na próxima jogada, você pode ir para aWhats new
seção para encontrar um novo comando ou recurso. Então não é tão difícil.Para fazer isso para um destino específico, você pode fazer o seguinte:
Você deve fazer isso se tiver mais de um alvo que está construindo e não quiser que todos usem os mesmos sinalizadores. Consulte também a documentação oficial em target_compile_definitions .
fonte
target_compile_definitions(my_target PRIVATE FOO=1)
diferençaset_source_files_properties(foo.cpp PROPERTIES COMPILE_DEFINITIONS -DFOO=1)
?target_compile_definitions
define o valor para WHOLE executable / library, onde como 'set_source_files_properties` define o valor apenas para o arquivo especificado. O último comando permite que os arquivos sejam compilados usando um idioma diferente; isto é:set_source_files_properties(compile_me_as_objc.c PROPERTIES -x objective-c
. Observe que-x objective-c
aqui está um sinalizador específico para GCC / Clang.Com o CMake versão 3.3.2, para criar
Eu precisava usar:
e, para ter uma definição de macro de pré-processador como esta:
a linha é assim modificada:
fonte
add_definitions()
outarget_compile_definitions()
. O comando mais modernoadd_compile_definitions()
,, não foi adicionado até o CMake 3.12. @ Leos313