尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
CMake流程控制
CMake流程控制一、IF条件判断1.基本语法2.条件类型3.布尔False类型二、列表循环foreach三、条件循环while四、循环控制break与continue五、函数与宏 (function / macro)命令分类核心命令功能说明典型使用场景条件判断if(condition) ... elseif(...) ... else() ... endif()根据条件表达式的真假选择性地执行代码块。区分操作系统如 Windows/Linux、判断构建类型Debug/Release、控制可选组件的编译。列表循环foreach()/endforeach()遍历列表中的元素或指定的数值范围对每个元素执行循环体。批量处理源文件、遍历依赖库列表、批量添加测试用例。条件循环while()/endwhile()只要指定的条件表达式为真就持续执行循环体。循环计数、持续检查某个文件是否生成、复杂的迭代逻辑。循环控制break()/continue()break用于跳出整个循环continue用于跳过当前迭代进入下一次循环。在满足特定条件时提前终止遍历或跳过不符合要求的元素。函数/宏定义function()/macro()封装可复用的代码块。function具有独立的变量作用域macro则是文本替换无独立作用域。封装复杂的编译选项设置、自定义查找依赖的逻辑、代码复用。一、IF条件判断1.基本语法结构语法说明示例基本ifif(condition)单一条件判断if(WIN32)if-elseif(condition) ... else()二选一分支if(DEBUG) ... else()if-elseif-elseif() ... elseif() ... else()多分支选择if(A) ... elseif(B) ... else()结束标记endif()必须的结束标记endif()2.条件类型类别语法说明示例逻辑运算NOT condition逻辑非if(NOT WIN32)condition1 AND condition2逻辑与if(UNIX AND NOT APPLE)condition1 OR condition2逻辑或if(DEBUG OR TEST_MODE)字符串比较var STREQUAL string字符串相等if(TYPE STREQUAL Debug)var STRLESS string字符串小于字典序if(NAME STRLESS zzz)var STRGREATER string字符串大于if(VER STRGREATER 1.0)var MATCHES regex正则匹配if(FILE MATCHES .*\\.cpp$)数值比较var EQUAL number数值相等if(COUNT EQUAL 5)var LESS number小于if(AGE LESS 18)var GREATER number大于if(SIZE GREATER 1024)var LESS_EQUAL number小于等于if(N LESS_EQUAL 100)var GREATER_EQUAL number大于等于if(N GREATER_EQUAL 0)文件/目录EXISTS path文件或目录存在if(EXISTS /tmp/file)IS_DIRECTORY path是否为目录if(IS_DIRECTORY /usr)IS_SYMLINK path是否为符号链接if(IS_SYMLINK /link)IS_ABSOLUTE path是否为绝对路径if(IS_ABSOLUTE ${PATH})变量检查DEFINED var变量已定义if(DEFINED MY_VAR)var变量非空且非假值if(MY_VAR)目标检查TARGET name目标是否存在if(TARGET mylib)COMMAND name命令是否存在if(COMMAND add_test)3.布尔False类型假值说明0数字零OFF关闭标志NO否定标志FALSE布尔假N否定简写IGNORE忽略标志NOTFOUND未找到标志空字符串*-NOTFOUND任何以-NOTFOUND结尾的字符串# 判断是否为 Windows 系统if(WIN32)message(STATUS当前系统为 Windows)# 判断是否为 Linux 系统 (UNIX 且非 APPLE)elseif(UNIX AND NOT APPLE)message(STATUS当前系统为 Linux)else()message(STATUS其他操作系统)endif()message(CMAKE_SYSTEM_NAME:${CMAKE_SYSTEM_NAME})变量名为 TRUE 的条件说明‌WIN32‌Windows 系统包括 32位 和 64位 Windows。‌注意‌在 Cygwin 中也可能为真需结合 CYGWIN 判断。‌APPLE‌Apple 系统包括 macOS (Darwin) 和 iOS。‌UNIX‌类 Unix 系统包括 Linux, macOS, BSD, AIX, Solaris 等。‌注意‌macOS 既是 APPLE 也是 UNIX。‌ANDROID‌Android 系统基于 Linux 内核但通常单独处理。‌IOS‌iOS 系统Apple 移动操作系统。MSVCMSVC编译器使用Microsoft Visual CCMAKE_COMPILER_IS_GNUCXXGCC编译器使用GNU C编译器‌CYGWIN‌Cygwin 环境Windows 下的 POSIX 兼容层。‌MSYS‌MSYS/MinGW 环境Windows 下的另一种 POSIX 兼容层。具体系统名称可以读取变量CMAKE_SYSTEM_NAME操作系统CMAKE_SYSTEM_NAME 的值备注‌Windows‌“Windows”‌Linux‌“Linux”各种发行版Ubuntu, CentOS等均为此值。‌macOS‌“Darwin”‌注意‌不是 “macOS” 或 “Apple”。‌iOS‌“iOS”‌Android‌“Android”‌FreeBSD‌“FreeBSD”‌AIX‌“AIX”IBM Unix 系统。‌Solaris‌“SunOS”Oracle Solaris。二、列表循环foreach# 定义一个listset(TEST_FILES TestA.cpp TestB.cpp TestC.cpp)# 遍历listforeach(file_name IN LISTS TEST_FILES)message(STATUSfile_name:${file_name})endforeach()# 从 1 遍历到 5步长为 2foreach(i RANGE152)message(STATUS指定步长:${i})endforeach()# 从 1 遍历到 5默认步长为 1foreach(i RANGE15)message(STATUS默认步长:${i})endforeach()三、条件循环whileset(count0)while(count LESS3)message(STATUS当前结果:${count})math(EXPR count${count} 1)endwhile()四、循环控制break与continue# 跳过偶数foreach(i RANGE110)math(EXPR temp${i}% 2)if(${temp}EQUAL0)message(STATUS跳过偶数:${i})continue()endif()# 输出奇数message(STATUS输出奇数:${i})# 如果数字大于7退出循环if(${i}GREATER7)message(STATUS数字${i}大于7循环结束)break()endif()endforeach()五、函数与宏 (function/macro)function(my_func value)set(name value)message(STATUS赋值 name -${value})endfunction()my_func(张三)
RELATED

相关推荐

Page Agent:驻留网页的 GUI 代理,多场景轻松集成!

Page Agent:驻留网页的 GUI 代理,多场景轻松集成!

Page Agent:驻留在网页中的 GUI 代理借助自然语言控制网页界面。🌐 英文 | 中文 🚀 演示 | 📖 文档 | 📢 Hacker News 讨论 | 𝕏 在 X 上关注[page - agent - demo - 0227.mp4](未给出链接&…

📅 2026/9/20 13:44:41
2026保姆级教程:PDF转Excel免费好用软件,电脑本地无水印在线工具全操作指南

2026保姆级教程:PDF转Excel免费好用软件,电脑本地无水印在线工具全操作指南

日常办公经常需要把报表、票据 PDF 导出成 Excel 表格,2026 年市面上可用的转换工具分为微信小程序、在线网页工具、电脑本地软件、Office 自带功能四大类,每一类都有适配不同设备 Windows、Mac 的操作方案,涵盖免费无水印、离线本地处理、批…

📅 2026/9/27 13:31:00
审计来了,数据权限全开——审计走了,怎么确保权限全部关掉?

审计来了,数据权限全开——审计走了,怎么确保权限全部关掉?

引言:审计结束三个月了,审计员的权限还没关某城商行每年按照监管要求开展至少一次数据安全审计。审计期间,内审部门需要抽样检查各类业务数据——交易流水、客户信息、员工操作日志、权限配置记录。这些数据分布在不同系统中,审计…

📅 2026/9/19 12:32:56
MORE NEWS

更多资讯

📰

263企业邮箱官方入口网页版新手入门避坑指南

263企业邮箱官方入口网页版新手入门避坑指南 找建站公司怕被坑高价?很多新手在起步阶段,最容易掉进的陷阱就是盲目追求“高大上”的服务包,结果花了几千块,做出来的网站连个正规的企业邮箱都配不上,或者邮箱入口藏得极深,客户根本找不到,白白流失商…

📰

OpenClaw 自定义皮肤配置指南:用 TaoToken 统一 Key 打通主题渲染链路

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

wordpress$user_id保姆级建站教程:告别备案焦虑

wordpress$user_id保姆级建站教程:告别备案焦虑 做网站最头疼的不是写代码,而是备案流程一头雾水。很多创业者盯着后台报错发呆,以为服务器配置错了,其实卡在政策合规上。这篇保姆级建站教程,专门拆解wordpress$user_i…

📰

miniQMT+AI高效协同:用Trae Skill打通策略配置与验证闭环(上)

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

大模型服务供应商 API 接口架构与请求格式差异化研究报告:TaoToken 统一 Key 通道下的配置骨架与验证实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

深度|Cursor首席设计师:伟大的事物是自然发生的;不要过早聚焦,也不要将规划凌驾于实践之上

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬