如何修改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
。我能做些什么才能让它发挥作用?
由于
答案 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
调用宏。