¿Cómo defino una variable de preprocesador a través de CMake?
El código equivalente sería #define foo
.
fuente
¿Cómo defino una variable de preprocesador a través de CMake?
El código equivalente sería #define foo
.
Durante mucho tiempo, CMake tuvo el add_definitions
comando para este propósito. Sin embargo, recientemente el comando ha sido reemplazado por un enfoque más detallado (comandos separados para compilar definiciones, incluir directorios y opciones de compilación).
Un ejemplo usando las nuevas add_compile_definitions :
add_compile_definitions(OPENCV_VERSION=${OpenCV_VERSION})
add_compile_definitions(WITH_OPENCV2)
O:
add_compile_definitions(OPENCV_VERSION=${OpenCV_VERSION} WITH_OPENCV2)
Lo bueno de esto es que evita el truco en mal estado que CMake tiene establecido add_definitions
. CMake es un sistema tan lamentable, pero finalmente están encontrando cierta cordura.
Encuentre más explicaciones sobre qué comandos usar para los indicadores del compilador aquí: https://cmake.org/cmake/help/latest/command/add_definitions.html
Del mismo modo, puede hacer esto por objetivo como se explica en la respuesta de Jim Hunziker.
add_compile_definitions
tirosCMake Error at CMakeLists.txt:6 (add_compile_definitions): Unknown CMake command "add_compile_definitions".
. Tuve que usaradd_compile_options(-D <your-def>)
en su lugar.cmake -D CMAKE_CXXFLAGS='-DDEBUG_CHESSBOARD'
https://cmake.org/cmake/help/v3.17/command/add_compile_definitions.html#command:add_compile_definitions
y comenzar a cambiar el número de versión hacia abajo hasta que desaparezca la página. Esa sería la versión donde aún no existe. En el siguiente movimiento, puede ir a laWhats new
sección para encontrar un nuevo comando o función. Entonces no es tan difícil.Para hacer esto para un objetivo específico, puede hacer lo siguiente:
Debes hacer esto si tienes más de un objetivo que estás construyendo y no quieres que todos usen las mismas banderas. Consulte también la documentación oficial sobre target_compile_definitions .
fuente
target_compile_definitions(my_target PRIVATE FOO=1)
diferente deset_source_files_properties(foo.cpp PROPERTIES COMPILE_DEFINITIONS -DFOO=1)
?target_compile_definitions
establece el valor para TODO el ejecutable / biblioteca, donde como 'set_source_files_properties` establece el valor solo para el archivo especificado. El último comando permite que los archivos se compilen usando un idioma diferente; es decir:set_source_files_properties(compile_me_as_objc.c PROPERTIES -x objective-c
. Tenga en cuenta que-x objective-c
aquí hay una bandera específica para GCC / Clang.Con CMake versión 3.3.2, para crear
Necesitaba usar:
y, para tener una definición de macro de preprocesador como esta otra:
la línea se modifica así:
fuente
add_definitions()
otarget_compile_definitions()
. El comando más modernoadd_compile_definitions()
no se agregó hasta CMake 3.12. @ Leos313