CMake_流程控制,函数和宏
AI-摘要
Tianli GPT
AI初始化中...
介绍自己 🙈
生成本文简介 👋
推荐相关文章 📖
前往主页 🏠
前往爱发电购买
CMake_流程控制,函数和宏
幻雪语法
条件语句
在 CMake 中,你可以使用 if
、elseif
、else
和 endif
来进行条件控制:
1 | if( ) # 执行当条件为真时的命令 |
条件可以基于变量的值、是否定义了变量、文件是否存在等条件。
循环
CMake 支持 foreach
循环和 while
循环。
其中 CMake 3.0以及更高版本中,你可以使用 IN LISTS
或 IN ITEMS
语法来明确指示 foreach
循环应该遍历的是列表变量或者是后面直接指定的项,使得 CMake 脚本更易读、写和维护。
使用 foreach
循环遍历列表中的每个项:
如果有需要遍历自己定义的变量那么
1 | foreach(loop_var IN [LISTS <list...>] [ITEMS <items...>]...) # 对列表中的每个项执行命令 注意ITEMS项要在LISTS后面 |
例如:
混用的时候作用是挨个解析读取,注意一定要在 IN 后面指定是什么类型(LISTS or ITEMS)
如果想进行更细的操作可以使用定义的局部变量来进行操作,例如
上面图片中是 file,我们可以通过 file_0,或者 file_1 来分别操作 sources 和 headers
注:如果是低版本没有 IN 那么需要以${A}的形式去指定自定义变量
如果只是想在循环中指定项目元素
疑问:ITEMS 和 LISTS 的区别是什么?
答:区别是 ITEMS 是输出名字而 LISTS 是会去解析变量名
1 | foreach(loop_var item1 item2 ... itemN) # 对列表中的每个项执行命令 |
例如:
或者是遍历数字
1 | foreach(loop_var RANGE total) # 命令 |
使用 while
循环,直到条件为假:
1 | while( ) # 执行命令直到条件变为假 |
函数和宏
函数和宏允许你定义代码块,并在需要的地方调用。
定义和调用函数:
1 | function(my_func_name param1 param2) # 函数体 |
定义和调用宏:
1 | macro(my_macro param1 param2) # 宏体 |
函数和宏之间的主要区别在于它们如何处理变量的作用域。宏不会产生新的作用域,而函数会。
用途
If:
对于不同的操作系统进行适配需要用到判断语句:
1 | if(WIN32) |
While:
可以构想一个场景,比如说,你需要在一列文件中搜索某个特定的文件,并将它的路径设置为变量:
1 | set(files "file1.txt" "file2.txt" "file3.txt") |
foreach:
用来存储源文件名,便于后期的管理
1 | set(src_files "main.cpp" "utils.cpp" "widget.cpp") |
Function:
用来封装命令
如上面的命令就可以封装
1 | function(print_source_files) |
或者
1 | macro(print_source_files) |
评论
匿名评论隐私政策
✅ 你无需删除空行,直接评论以获取最佳展示效果