CMake 教程
欢迎学习 CMake!本教程将带你从零开始,逐步掌握 CMake 构建系统的核心知识和实践技能。
什么是 CMake?
CMake 是一个开源的跨平台构建系统生成器。它不直接构建软件,而是生成标准的构建文件(如 Unix 的 Makefile、Windows 的 Visual Studio 项目文件等),然后由本地构建工具执行实际的编译和链接。
CMake 的核心特点
- 跨平台:支持 Windows、Linux、macOS 等多种操作系统
- 多构建系统支持:生成 Makefile、Ninja、Visual Studio、Xcode 等多种构建文件
- 语言无关:支持 C、C++、Objective-C、Fortran、Java 等多种语言
- 依赖管理:自动查找和管理外部库依赖
- 测试支持:集成 CTest 和 CDash 测试框架
CMake 的工作流程
CMake 与传统构建系统对比
| 特性 | CMake | 手写 Makefile | IDE 项目文件 |
|---|---|---|---|
| 跨平台 | 自动处理 | 需要多版本 | 平台特定 |
| 依赖管理 | 自动查找 | 手动管理 | 手动配置 |
| 外部库支持 | find_package | 手动指定 | 手动配置 |
| 构建类型 | Debug/Release | 手动配置 | IDE 内置 |
| 可维护性 | 高 | 中等 | 低 |
为什么学习 CMake?
- 行业标准:CMake 已成为 C/C++ 项目的主流构建工具
- 大型项目支持:Qt、KDE、LLVM、OpenCV 等知名项目都在使用
- 现代 C++ 开发:C++20 模块、包管理器等现代特性支持
- IDE 无关性:开发者可以使用自己喜欢的编辑器和构建环境
- CI/CD 友好:命令行驱动,易于集成到自动化流程
CMake 的应用场景
开源项目
- 跨平台的库和应用程序
- 需要支持多种编译器和构建系统
- 需要处理复杂的依赖关系
企业开发
- 大型代码库的统一构建
- 多平台产品发布
- 嵌入式系统开发
科研和教学
- 跨平台的研究代码
- 教学项目的标准化构建
CMake 版本历史
| 版本 | 发布时间 | 重要特性 |
|---|---|---|
| 3.0 | 2009 | 重新设计,现代化架构 |
| 3.15 | 2018 | Windows 持久化缓存 |
| 3.20 | 2021 | 预设包管理器支持 |
| 3.25 | 2023 | 预设配置文件、编译器预设 |
| 3.28 | 2024 | 增强的依赖提供器 |
本教程基于 CMake 3.28 编写。
教程目录
基础入门
目标管理
依赖管理
- 查找包 - find_package 指令详解
- FetchContent - 运行时获取外部内容
高级特性
测试与打包
知识速查
- 速查表 - CMake 常用命令速查
学习建议
- 动手实践:每学一个知识点,都要创建示例项目验证
- 循序渐进:从简单的单文件项目开始,逐步掌握复杂功能
- 阅读官方文档:CMake 官方文档是最权威的参考资料
- 参考优秀项目:学习知名开源项目的 CMake 配置
参考资源
准备好开始学习了吗?点击下一章开始你的 CMake 学习之旅!