无法在CMake marcro中更新变量

car*_*ose 2 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' set to 'init'
SET(_test "init")
MYTEST("${_test}")
message("after macro call:${_test}")
Run Code Online (Sandbox Code Playgroud)

这打印:

input RETVAL=init
after update RETVAL=init
after macro call:init
Run Code Online (Sandbox Code Playgroud)

_test永远不会修改变量.我能做些什么才能让它发挥作用?

谢谢

Rei*_*ica 5

使用CMake宏,您需要非常仔细地区分宏参数名称,变量名称,变量值等.从您的CMake代码中您想要实现的目标并不十分清楚,但我假设您要使用宏设置_test为字符串new return value.

这是完成该任务的代码:

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}")
Run Code Online (Sandbox Code Playgroud)

注意事项:

  • 您希望宏修改传入的变量.该变量的名称存储在宏参数中RETVAL.所以你需要set(${RETVAL} ...)设置varibale.您的代码正在创建一个名为的变量RETVAL.

  • 您需要传递变量的名称才能更改为宏.所以你必须通过_test,而不是${_test}.您的代码使用文本调用宏init.