cmake宏的参数在宏的范围内和范围内是只读的吗?
考虑以下代码:
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)
来自宏上的CMake文档:
请注意,宏的参数和ARGN等值不是通常CMake意义上的变量。它们是字符串的替代品就像c预处理器处理宏一样。如果你想要真正的CMake您应该查看函数命令中的变量。
请记住,与宏不同,函数引入了一个新的作用域。因此,无论何时set
是函数中的一个变量,都必须将PARENT_SCOPE
作为一个参数,以使更改对调用者可见。