Как определить макрос CMake в терминах другого?
Как определить макрос CMake в терминах другого?
add_definitions(-DMACRO1=1)
add_definitions(-DMACRO2=2)
add_definitions(-DMACRO3=${MACRO1}) # no effect
message( "COMPILE_DEFINITIONS = ${DirDefs}" )
Это вывод, который я хотел бы:
COMPILE_DEFINITIONS = MACRO1=1;MACRO2=2;MACRO3=1
Вот что я получаю:
COMPILE_DEFINITIONS = MACRO1=1;MACRO2=2;MACRO3=
2 ответа
Призвание add_definitions(-DMACRO1=1)
просто добавляет это определение в командную строку вашего компилятора. Его значение эквивалентно #define
директива в вашем исходном коде. Он не создает переменную CMake.
Итак, в вашем случае,${MACRO1}
приводит к пустой строке, в результате чего
ADD_DEFINITIONS(-DMACRO3=)
Чтобы заставить это работать, используйте SET(...)
определить переменную в CMake:
set(MACRO1 1)
add_definitions(-DMACRO1=${MACRO1})
add_definitions(-DMACRO2=2)
add_definitions(-DMACRO3=${MACRO1})
message( "COMPILE_DEFINITIONS = ${DirDefs}" )
Единственное, что приходит мне в голову, это выполнение в командной строке:
$ cmake -DMACRO1=1 -DMACRO2=2 .
С помощью этой команды мы гарантируем, что эти переменные будут существовать при выполнении вашего CMakeLists.txt. Таким образом, вы можете использовать их в этом.
Затем создайте в вашем CMakeLists.txt вспомогательную переменную, чтобы убедиться в правильности значения:
set(_MACRO3 ${MACRO1})
MESSAGE("MACRO3 value = ${_MACRO3}")
ADD_DEFINITIONS(-DMACRO3=${_MACRO3})
Я думаю, что если вы только напишите:
ADD_DEFINITIONS(-DMACRO3=${MACRO1})
Это тоже будет правильно.