无法更新 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.

  • 调用宏