CMake 示例# 参考:CMake 官方文档 & ttroy50/cmake-examples 环境配置 CMake 基础 hello-cmake 包含头文件 各种可用变量 源文件变量(不建议!) 包含静态库 核心概念 创建静态库 包含目录配置 链接库文件 构建流程 创建并链接共享库 添加共享库 别名目标 链接共享库 构建示例 make install 核心概念 安装机制 文件安装 构建验证 高级配置 自定义安装路径 暂存安装 卸载机制 环境配置 构建示例 构建类型 设置构建类型 设置默认构建类型 构建示例 编译标志 设置目标特定的 C++ 标志 设置默认 C++标志 设置 CMake 标志 构建示例 包含第三方库 查找包 检查包是否找到 导出的变量 别名/导入目标 非别名目标 构建示例 使用 clang 编译 设置标志 构建示例 使用 ninja 构建 生成器 命令行构建工具生成器 IDE 构建工具生成器 其他生成器 调用生成器 构建示例 导入目标 导入目标 构建示例 C++标准 C++标准常见方法 检查编译标志 添加标志 构建示例 设置 C++标准 使用 CXX_STANDARD 属性 构建示例 target_compile_features 设置 C++标准 使用 target_compile_features 构建示例 子项目管理示例 基本子项目 添加子目录 引用子项目目录 纯头文件库 从子项目引用库 包含子项目的目录 构建示例 合并多个动态库为单个动态库 一、项目结构设计 二、模块目录配置(module1/CMakeLists.txt) 三、根目录配置(CMakeLists.txt) 四、关键技术解析 五、构建与验证 六、高级场景处理 1. 动态库合并(非推荐方案) 2. 跨平台兼容 3. 符号冲突解决 七、性能优化建议 八、常见问题排查 项目结构说明 包含的示例 最佳实践 代码生成 配置文件生成 配置文件 构建示例 使用 Google Protocol Buffers 生成 C++源代码 导出的变量 生成源代码 生成文件 构建示例 静态分析 Clang 静态分析器 scan-build scan-build 输出 构建示例 Clang 格式化 clang-format 格式风格 目标 format 格式 format-check 格式检查 format-check-changed 格式检查已更改 单元测试 Boost 单元测试框架 启用测试 添加测试可执行文件 添加测试 构建示例 Catch2 单元测试框架 Vendoring catch2 Catch2 接口库 使用 C++11 构建 启用测试 添加测试可执行文件 添加测试 示例 Google 测试单元测试框架 下载并构建 Google Test 启用测试 添加测试可执行文件 添加测试 构建示例 安装程序 创建 deb 文件 CPack 生成器 Debian 软件包设置 构建示例 包管理 使用系统提供的包管理器 代码管理 包含第三方代码 使用 git 来管理代码 示例 外部项目 标准 替代方法 Conan ROOT 测试 简单的 ROOT 项目:UseFile 系统 examples/root-usefile/CMakeLists.txt examples/root-usefile/SimpleExample.cxx 简单的 ROOT 项目:使用目标系统 examples/root-simple/CMakeLists.txt examples/root-simple/SimpleExample.cxx ROOT 字典示例 examples/root-dict/CMakeLists.txt 支持文件 examples/root-dict/DictExample.cxx examples/root-dict/DictExample.h examples/root-dict/DictLinkDef.h 测试 examples/root-dict/CheckLoad.C