CMake的函数和宏
CMake本身整理逻辑可以通过 宏(macro) 和 函数(function),声明十分类似
官方文档说明
在宏的官方文档中有提到两者不同的问题,提出了两点主要的差别
- 宏是类似C语言的预处理,大部分是字符串替换,不会有函数内的变量
- 遇到return()宏不会停止,函数会直接返回
1 | The macro command is very similar to the function() command. ...... |
更重要的区别Scope不同
例如我们想输入一个变量获得结果,有两种方式,但是经过对比可以发现 load_message_func 并不能正确输出
原因是因为func拥有单独的scope, variable 和外部的并不通用,C语言里一般会采用传入指针来解决
1 | # 声明Macro |
CMake里的函数是没有返回值的,也就是说需要有方法做到类似JS的作用域提升
1 | # 声明Func,并采用作用域提升 |