如何根据另一个定义一个 CMake 宏?
How to define a CMake macro in terms of another one?
如何根据另一个 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=
我唯一想到的是在命令行执行:
$ cmake -DMACRO1=1 -DMACRO2=2 .
使用此命令,我们确保在您执行 CMakeLists.txt 时这些变量将存在。所以你可以在这个中使用它们。
然后,在您的 CMakeLists.txt 中创建一个辅助变量以确保值正确:
set(_MACRO3 ${MACRO1})
MESSAGE("MACRO3 value = ${_MACRO3}")
ADD_DEFINITIONS(-DMACRO3=${_MACRO3})
我想如果你只写:
ADD_DEFINITIONS(-DMACRO3=${MACRO1})
也是对的
调用 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 宏定义一个 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=
我唯一想到的是在命令行执行:
$ cmake -DMACRO1=1 -DMACRO2=2 .
使用此命令,我们确保在您执行 CMakeLists.txt 时这些变量将存在。所以你可以在这个中使用它们。
然后,在您的 CMakeLists.txt 中创建一个辅助变量以确保值正确:
set(_MACRO3 ${MACRO1})
MESSAGE("MACRO3 value = ${_MACRO3}")
ADD_DEFINITIONS(-DMACRO3=${_MACRO3})
我想如果你只写:
ADD_DEFINITIONS(-DMACRO3=${MACRO1})
也是对的
调用 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}" )