# cmakeLearningCode **Repository Path**: long-xu/cmake-learning-code ## Basic Information - **Project Name**: cmakeLearningCode - **Description**: 专注于CMake学习与实践的代码仓库,涵盖基础教程、实例代码和高级技巧,助力开发者掌握CMake构建系统。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-03-19 - **Last Updated**: 2025-08-07 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # CMake Learning Code 这是一个专注于CMake学习与实践的代码仓库,通过一系列循序渐进的示例(recipes)来帮助开发者掌握CMake构建系统。 ## 项目介绍 本项目包含了从基础到高级的CMake使用示例,每个示例都专注于特定的CMake特性或使用场景。通过这些示例,你可以学习: - CMake的基本语法和项目结构 - 库的创建和链接(静态库、动态库、OBJECT库) - CMake的控制结构(foreach、if、while等) - 编译选项和配置 - 跨平台和架构检测 - 面向对象的CMake项目组织 - 更多高级CMake特性 本系列强调实践,通过实际项目来应用所学知识。本系列的 CMake 路线图: 第一阶段:基础入门 1. 了解 CMake 的基本概念:什么是 CMake?为什么需要 CMake?以及如何下载安装 CMake。 2. 编写第一个 CMakeLists.txt:学习如何使用 `cmake` 命令生成构建文件,学习如何使用生成的构建文件进行编译。 3. 理解 CMake 变量和命令:学习如何设置和使用 CMake 变量,学习常用的 CMake 命令。 5. 掌握基本构建流程:了解配置 (configure)、构建 (build) 和安装 (install) 的概念。了解 CMake 的构建目录和源目录的区别。理解构建类型(Debug, Release)。 第二阶段:中级进阶。 1. 模块化和代码组织:学习如何使用 `add_subdirectory` 命令将项目分解为多个模块。学习如何管理模块之间的依赖关系。以及了解如何创建和使用静态/动态库。 2. 查找依赖项:深入理解 `find_package` 命令,以及如何查找外部库。学习如何处理找不到依赖项的情况。了解 `pkg-config` 等工具。 3. 条件编译和平台特定代码:学习如何使用 `if` 语句和条件变量来控制构建过程。了解 CMake 提供的平台检测变量。学习如何编写平台特定的代码。 4. 生成器表达式和目标属性:了解并使用生成器表达式 `$<...>`,实现更灵活的构建配置。掌握常用的目标属性,例如 `OUTPUT_NAME`、`VERSION`、`CXX_STANDARD`。 5. 单元测试:学习如何使用 CTest 来进行单元测试。了解如何集成测试框架。 第三阶段:高级技巧。 1. 自定义命令和脚本:学习如何使用 `add_custom_command` 和 `add_custom_target` 添加自定义构建步骤。了解如何使用 CMake 脚本语言编写自定义逻辑。 2. 打包和安装:学习如何使用 CPack 创建安装包。了解不同的打包格式 (例如 ZIP, DEB, RPM)。 3. 了解如何集成代码覆盖率分析工具,并生成报告。了解一些 CMake 最佳实践。学习如何设计一个好的 CMake 项目结构。 4. CMake 在不断发展,保持学习的心态,关注随时了解 CMake 的新特性。 ## 目录结构 项目包含以下主要示例: - `recipe_01`: 基础CMake项目示例,展示最简单的CMake配置 - `recipe_05_libs`: 演示如何创建和使用库 - `recipe_05_OBJECT`: 展示OBJECT库的使用 - `recipe_06_foreach`: 使用foreach循环处理多个源文件 - `recipe_06_if`: 条件语句的使用示例 - `recipe_06_while`: while循环的使用示例 - `recipe_07_option`: CMake选项的基本使用 - `recipe_07_dependent_option`: 依赖选项的使用 - `recipe_08_compiler`: 编译器相关配置 - `recipe_08_compiler_option`: 编译选项的设置 - `recipe_10`: 面向对象的CMake项目示例 - `recipe_12_checkOS`: 操作系统检测 - `recipe_12_platform`: 平台相关特性 - `recipe_13_detect_arch`: 架构检测示例 ## 使用方法 1. 克隆仓库: ```bash git clone https://gitee.com/long-xu/cmake-learning-code.git ``` 2. 选择要学习的示例,进入对应目录: ```bash cd recipe_XX ``` 3. 创建构建目录并进入: ```bash mkdir build && cd build ``` 4. 配置项目: ```bash cmake .. ``` 5. 构建项目: ```bash cmake --build . ``` ## 环境要求 - CMake 3.10 或更高版本 - 支持C++的编译器(如GCC、Clang、MSVC等) - 基本的命令行操作知识 ## 学习建议 1. 按照示例编号顺序学习,从基础的recipe_01开始 2. 仔细阅读每个示例中的CMakeLists.txt文件及相关代码 3. 尝试修改配置并观察结果 4. 实践每个示例,确保理解每个CMake特性的作用 ## 贡献指南 1. Fork 本仓库 2. 创建新的特性分支 (`git checkout -b feature/AmazingFeature`) 3. 提交你的更改 (`git commit -m 'Add some AmazingFeature'`) 4. 推送到分支 (`git push origin feature/AmazingFeature`) 5. 创建一个 Pull Request ## 许可证 本项目采用 MIT 许可证 - 查看 [LICENSE](LICENSE) 文件了解详细信息 ## 联系方式 如果你有任何问题或建议,欢迎通过以下方式联系: - 提交 Issue - 创建 Pull Request 欢迎贡献代码,帮助完善这个CMake学习资源! 微信公众号: ![alt text](image.png) 每日推送干货文章,欢迎关注!专注分享高新开发技术知识,包括C/C++、Linux、网络协议、中间件、云原生、数据库等。