可以在CMake宏中更新变量

时间:2015-01-15 11:08:06

标签: 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}")

打印:

input RETVAL=init
after update RETVAL=init
after macro call:init

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

由于

1 个答案:

答案 0 :(得分: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}")

注意事项:

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

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