CMake 12 函数和宏
CMake中用以下指令定义函数
function(<name> [<arg1> …])
<commands>
endfunction()
function指令,指定函数的名称,参数名称
endfunction指令,用于结束函数的定义,可以传入与function指令中同样的函数名称作为参数,也可以不传。
这两个指令中间就是函数要执行的命令。
调用时直接使用函数名即可,不区分大小写
即如果这样定义函数:
function(func)
<command>
endfunction()
则可以这样调用 func() 或者 FUNC()
函数的参数
- ARGC:参数的个数
- ARGV0、ARGV1、…ARGV#:第#个参数的值
- ARGV:所有传入的参数值的列表
- ARGN:如果在定义函数时,显式的指定了两个参数,而在调用时,传入了五个参数,则后面的三个参数的值就存在在这个变量里
注意:set(<variable> <value>... [PARENT_SCOPE]),如果PARENT_SCOPE指定了,那么变量将在当前作用域的父作用域中生效。
CMake中的宏与函数很相似,但也有区别。
相同:调用方式相同,同样是不区分名称大小写,参数的引用同样可用,如${ARGC},${ARGN}等。
区别:CMake的宏跟C语言的宏类似,直接替换,宏的参数相关的引用,并不是真实的变量,而函数中对函数的引用,则是真实的变量,函数有自身的域而宏没有。
宏定义使用 macro 和 endmacro指令。