我问了一些关于cmake和传递变量的问题here。我可以使它工作,但只有当我在函数中命名我的变量不同于父作用域中的变量时,我才调用函数。所以本质上:
function(strange name)
message(STATUS ${name})
message(STATUS ${${name}})
endfunction()
set(name foo)
set(anothername foo)
strange(name)
strange(anothername)
结果是:
-- name (message(STATUS ${name}) for var "name")
-- name (message(STATUS ${${name}}) for var "name")
-- anothername message(STATUS ${name}) for var "anothername")
-- foo (message(STATUS ${${name}}) for var "anothername")
这不是有点奇怪吗?发生了什么? 我认为函数的行为不应该依赖于父作用域中变量的命名 - 它应该吗?!
非常感谢任何澄清!
答案 0 :(得分:3)
如果您想避免@ Lindydancer简明回答中描述的本地范围问题,您可以将您的功能更改为macro
来自macro
的文档:
请注意,宏的参数和ARGN等值不是通常CMake意义上的变量。它们是字符串替换,就像c预处理器与宏一样。如果你想要真正的CMake变量,你应该看一下函数命令。
如果您更改为使用macro
,则输出将变为
-- name -- foo -- anothername -- foo