Macros Can';t更新CMake marcro内的变量

Macros Can';t更新CMake marcro内的变量,macros,cmake,Macros,Cmake,如何修改CMake宏中的参数 我正在使用CMake 2.6版,无法更新变量 以下是一个基本示例: # macro definition MACRO(MYTEST RETVAL) message("input RETVAL=${RETVAL}") SET(RETVAL "new return value") message("after update RETVAL=${RETVAL}") ENDMACRO(MYTEST) # call macro with parameter '_test' s

如何修改CMake宏中的参数

我正在使用CMake 2.6版,无法更新变量

以下是一个基本示例:

# macro definition
MACRO(MYTEST RETVAL)
message("input RETVAL=${RETVAL}")
SET(RETVAL "new return value")
message("after update RETVAL=${RETVAL}")
ENDMACRO(MYTEST)

# call macro with parameter '_test' set to 'init'
SET(_test "init")
MYTEST("${_test}")
message("after macro call:${_test}")
这张照片是:

input RETVAL=init
after update RETVAL=init
after macro call:init
变量
\u test
从不修改。我能做些什么使它工作


感谢使用CMake宏,您需要非常仔细地区分宏参数名称、变量名称、变量值等。从CMake代码中不太清楚您想要实现什么,但我假设您想要使用宏将
\u test
设置为字符串
新返回值

这是实现以下目标的代码:

macro(MYTEST RETVAL)
  message("input variable name: RETVAL=${RETVAL}")
  message("input variable value: ${${RETVAL}}")
  set(${RETVAL} "new return value")
  message("variable name after update: RETVAL=${RETVAL}")
  message("variable value after update: ${${RETVAL}}")
endmacro()

set(_test "init")
MYTEST(_test)
message("after macro call: ${_test}")
注意事项:

  • 您希望宏修改传入的变量。该变量的名称存储在宏参数
    RETVAL
    中。因此,您需要
    设置(${RETVAL}…
    来设置变量。您的代码正在创建名为
    RETVAL
    的变量

  • 您需要将变量的名称传递给宏。所以你必须通过
    \u测试
    ,而不是
    ${\u测试}
    。您的代码正在使用文本
    init
    调用宏