首先贴一个例子进行分析
set(var "ABC")
macro(Moo arg)
message("arg = ${arg}")
set(arg "abc")
message("# After change the value of arg.")
message("arg = ${arg}")
endmacro()
message("=== Call macro ===")
Moo(${var})
这段使用cmake 的输出如下:
=== Call macro ===
arg = ABC
# After change the value of arg.
arg = ABC
=== Call func
一开始感觉很奇怪,明明设置set(arg "abc")了,怎么没有生效?为什么是这样子的输出。研究一番发现,macro(Moo arg)里面,会将${arg}的内容用实际传入宏的参数替换,set(arg "abc")的作用只是设置了一个arg的变量,我在调用宏后面打印出来:
set(var "ABC")
macro(Moo arg)
message("arg = ${arg}")
set(arg "abc")
message("# After change the value of arg.")
message("arg = ${arg}")
endmacro()
message("=== Call macro ===")
Moo(${var})
message("${arg}")
这是后的输出如下:
=== Call macro ===
arg = ABC
# After change the value of arg.
arg = ABC
abc
这里和正常c里面的宏是一样的,仅仅是个代码替换的作用。