无法更新 CMake 宏中的变量
Can't update variable inside CMake marcro
如何修改 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
从未被修改。我该怎么做才能让它发挥作用?
谢谢
使用 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} ...)
来设置变量。您的代码正在创建一个名为 RETVAL
.
的变量
需要将变量的名称传递给宏。所以你必须通过 _test
,而不是 ${_test}
。您的代码使用文本 init
.
调用宏
如何修改 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
从未被修改。我该怎么做才能让它发挥作用?
谢谢
使用 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} ...)
来设置变量。您的代码正在创建一个名为RETVAL
. 的变量
需要将变量的名称传递给宏。所以你必须通过
_test
,而不是${_test}
。您的代码使用文本init
. 调用宏