Definir una macro de preprocesador a través de CMake
¿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 del compilador).
Un ejemplo que utiliza el nuevo 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 engañoso truco que CMake tiene implementado add_definitions
. CMake es un sistema muy 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
Asimismo, puede hacer esto por objetivo como se explica en la respuesta de Jim Hunziker.
Para hacer esto para un objetivo específico, puede 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 construyendo y no quieres que todos usen las mismas banderas. Consulte también la documentación oficial sobre target_compile_definitions .