1

如何根据另一个定义 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=
4

2 回答 2

2

调用add_definitions(-DMACRO1=1)只是将此定义添加到编译器的命令行中。它的值相当于#define源代码中的指令。它不会创建CMake 变量。

因此,在您的情况下,${MACRO1}评估为空字符串,导致

ADD_DEFINITIONS(-DMACRO3=)

要使其工作,请使用在 CMakeSET(...)中定义变量:

set(MACRO1 1)
add_definitions(-DMACRO1=${MACRO1})
add_definitions(-DMACRO2=2)

add_definitions(-DMACRO3=${MACRO1})

message( "COMPILE_DEFINITIONS = ${DirDefs}" )
于 2015-01-22T10:41:02.043 回答
1

我唯一想到的是在命令行执行:

$ cmake -DMACRO1=1 -DMACRO2=2 .

使用此命令,我们确保在您执行 CMakeLists.txt 时这些变量将存在。所以你可以在这个中使用它们。

然后,在 CMakeLists.txt 中创建一个辅助变量以确保值正确:

set(_MACRO3 ${MACRO1})
MESSAGE("MACRO3 value = ${_MACRO3}")
ADD_DEFINITIONS(-DMACRO3=${_MACRO3})

我想如果你只写:

ADD_DEFINITIONS(-DMACRO3=${MACRO1})

也会是对的。

于 2015-01-22T08:45:57.393 回答