¿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_definitionscomando 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_definitionstirosCMake 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_definitionsy 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 newsecció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_definitionsestablece 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-caquí 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