3

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

考虑以下代码:

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

test("original")

输出是

output: original
output: original

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

4

1 回答 1

6

改用函数

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

来自关于宏的 CMake 文档

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

请记住,尽管与宏不同,函数引入了新的作用域。因此,每当您set在函数中使用变量时,都必须将PARENT_SCOPE其作为参数提供,以使调用者可以看到更改。

于 2013-06-28T13:38:24.310 回答