正在宏范围内设置CMake宏参数



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作为一个参数,以使更改对调用者可见。

最新更新