todas salida procesador preprocesamiento preprocesador macro lenguaje las funciones funcion entrada encuentran ejecutar directivas directiva definicion define cuál cual compilar compilador codigo c++ cmake

salida - ¿Cómo definir una macro de preprocesador de C++ a través de la línea de comandos con CMake?



funcion preprocesador en c++ (3)

Intento establecer una macro de preprocesador en la línea de comandos de CMake. He intentado:

set generator="Visual Studio 8 2005" set params=-D MY_MACRO=1 cmake.exe -G %generator% %params% ../some_project

pero no está definido cuando compilo ni puedo encontrar el nombre MY_MACRO en los archivos generados por CMake, excepto CMakeCache.txt donde está presente en la forma:

MY_MACRO:UNINITIALIZED=1

¿Cómo puedo hacerlo?


A menos que tenga una buena razón para no hacerlo , debe usar ADD_DEFINITIONS(<name>=<value>[, ...]) .

Solo agrega la siguiente línea a tu CMakeLists.txt:

ADD_DEFINITIONS("MY_MACRO=1")

CMake se hará cargo de la sintaxis de los conmutadores (ya sea -D<name>=<value> , o /D<name>=<value> ).


Prueba esto: -D CMAKE_CXX_FLAGS=/DMY_MACRO=1


Una buena alternativa sería definir una opción cmake:

OPTION(DEFINE_MACRO "Option description" ON) # Enabled by default

Seguido de una condición:

IF(DEFINE_MACRO) ADD_DEFINITIONS(-DMACRO) ENDIF(DEFINE_MACRO)

Luego puede activar / desactivar esa opción a través de la línea de comandos con cmake usando la marca -D . Ejemplo:

cmake -DDEFINE_MACRO=OFF ..

Para asegurarse de que el compilador esté recibiendo la definición correcta, puede llamar a make en modo detallado y verificar si la macro se está definiendo o no:

make VERBOSE=1

Esta es una buena solución también porque make recompilará su código cuando cambie alguna de las opciones de cmake.