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