cmake-macro 的参数是否在宏范围内和宏范围内只读?
考虑以下代码:
macro(test arg)
message("output: ${arg}")
set(arg "overwritten")
message("output: ${arg}")
endmacro(test)
test("original")
输出是
output: original
output: original
有没有办法改变这种行为?
cmake-macro 的参数是否在宏范围内和宏范围内只读?
考虑以下代码:
macro(test arg)
message("output: ${arg}")
set(arg "overwritten")
message("output: ${arg}")
endmacro(test)
test("original")
输出是
output: original
output: original
有没有办法改变这种行为?
改用函数:
function(test arg)
message("output: ${arg}")
set(arg "overwritten")
message("output: ${arg}")
endfunction(test)
请注意,宏的参数和 ARGN 等值不是通常 CMake 意义上的变量。它们是字符串替换,就像 c 预处理器对宏所做的那样。如果您想要真正的 CMake 变量,您应该查看函数命令。
请记住,尽管与宏不同,函数引入了新的作用域。因此,每当您set
在函数中使用变量时,都必须将PARENT_SCOPE
其作为参数提供,以使调用者可以看到更改。