c++ cmake c-preprocessor

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.