在宏范围内设置CMake宏参数

时间:2013-06-28 13:32:59

标签: cmake

cmake-macro的参数是否在宏的范围内和期间是只读的?

考虑以下代码:

macro(test arg)
    message("output: ${arg}")
    set(arg "overwritten")
    message("output: ${arg}")
endmacro(test)

test("original")

输出

output: original
output: original

有没有办法改变这种行为?

1 个答案:

答案 0 :(得分:6)

改为使用function

function(test arg)
    message("output: ${arg}")
    set(arg "overwritten")
    message("output: ${arg}")
endfunction(test)

来自CMake docs on macro

  

请注意,宏的参数和ARGN等值不是   通常的CMake意义上的变量。它们很多都是字符串替换   就像c预处理器会用宏做的那样。如果你想要真正的CMake   您应该查看函数命令的变量。

请记住,与宏不同,函数引入了新的范围。因此,只要您在函数中set变量,就必须将PARENT_SCOPE作为参数,以使调用对变更者可见。