c++ - Definir macro preprocesador a través de cmake.
c-preprocessor (3)
¿Cómo defino una variable de preprocesador a través de cmake?
El código equivalente sería #define foo
.
Con la versión 3.3.2 de CMake, para crear
#define foo
Necesitaba usar:
add_definitions(-Dfoo) # <--------HERE THE NEW CMAKE LINE inside CMakeLists.txt
add_executable( ....)
target_link_libraries(....)
y, para tener una definición de macro preprocesador como esta otra:
#define foo=5
La línea está tan modificada:
add_definitions(-Dfoo=5) # <--------HERE THE NEW CMAKE LINE inside CMakeLists.txt
add_executable( ....)
target_link_libraries(....)
Durante mucho tiempo, CMake tuvo el comando add_definitions
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 compilador).
Un ejemplo que utiliza 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 la mala calidad que CMake tiene para add_definitions
. CMake es un sistema tan lamentable, pero finalmente están encontrando algo de 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.
Para hacer esto para un objetivo específico, puedes hacer lo siguiente:
target_compile_definitions(my_target PRIVATE FOO=1 BAR=1)
Debes hacer esto si tienes más de un objetivo que estás creando y no quieres que todos utilicen las mismas banderas.