目 录目 录 Introduction前言第0章 配置环境 0.1 获取代码0.2 Docker镜像0.3 安装必要的软件0.4 测试环境0.5 上报问题并提出改进建议 第1章 从可执行文件到库 1.1 将单个源文件编译为可执行文件1.2 切换生成器1.3 构建和链接静态库和动态库1.4 用条件句控制编译1.5 向用户显示选项1.6 指定编译器1.7 切换构建类型1.8 设置编译器选项1.9 为语言设定标准1.10 使用控制流 第2章 检测环境 2.1 检测操作系统2.2 处理与平台相关的源代码2.3 处理与编译器相关的源代码2.4 检测处理器体系结构2.5 检测处理器指令集2.6 为Eigen库使能向量化 第3章 检测外部库和程序 3.1 检测Python解释器3.2 检测Python库3.3 检测Python模块和包3.4 检测BLAS和LAPACK数学库3.5 检测OpenMP的并行环境3.6 检测MPI的并行环境3.7 检测Eigen库3.8 检测Boost库3.9 检测外部库:Ⅰ. 使用pkg-config3.10 检测外部库:Ⅱ. 自定义find模块 第4章 创建和运行测试 4.1 创建一个简单的单元测试4.2 使用Catch2库进行单元测试4.3 使用Google Test库进行单元测试4.4 使用Boost Test进行单元测试4.5 使用动态分析来检测内存缺陷4.6 预期测试失败4.7 使用超时测试运行时间过长的测试4.8 并行测试4.9 运行测试子集4.10 使用测试固件 第5章 配置时和构建时的操作 5.1 使用平台无关的文件操作5.2 配置时运行自定义命令5.3 构建时运行自定义命令:Ⅰ. 使用add_custom_command5.4 构建时运行自定义命令:Ⅱ. 使用add_custom_target5.5 构建时为特定目标运行自定义命令5.6 探究编译和链接命令5.7 探究编译器标志命令5.8 探究可执行命令5.9 使用生成器表达式微调配置和编译 第6章 生成源码 6.1 配置时生成源码6.2 使用Python在配置时生成源码6.3 构建时使用Python生成源码6.4 记录项目版本信息以便报告6.5 从文件中记录项目版本6.6 配置时记录Git Hash值6.7 构建时记录Git Hash值 第7章 构建项目 7.1 使用函数和宏重用代码7.2 将CMake源代码分成模块7.3 编写函数来测试和设置编译器标志7.4 用指定参数定义函数或宏7.5 重新定义函数和宏7.6 使用废弃函数、宏和变量7.7 add_subdirectory的限定范围7.8 使用target_sources避免全局变量7.9 组织Fortran项目 第8章 超级构建模式 8.1 使用超级构建模式8.2 使用超级构建管理依赖项:Ⅰ.Boost库8.3 使用超级构建管理依赖项:Ⅱ.FFTW库8.4 使用超级构建管理依赖项:Ⅲ.Google Test框架8.5 使用超级构建支持项目 第9章 语言混合项目 9.1 使用C/C++库构建Fortran项目9.2 使用Fortran库构建C/C++项目9.3 使用Cython构建C++和Python项目9.4 使用Boost.Python构建C++和Python项目9.5 使用pybind11构建C++和Python项目9.6 使用Python CFFI混合C,C++,Fortran和Python 第10章 编写安装程序 10.1 安装项目10.2 生成输出头文件10.3 输出目标10.4 安装超级构建 第11章 打包项目 11.1 生成源代码和二进制包11.2 通过PyPI发布使用CMake/pybind11构建的C++/Python项目11.3 通过PyPI发布使用CMake/CFFI构建C/Fortran/Python项目11.4 以Conda包的形式发布一个简单的项目11.5 将Conda包作为依赖项发布给项目 第12章 构建文档 12.1 使用Doxygen构建文档12.2 使用Sphinx构建文档12.3 结合Doxygen和Sphinx 第13章 选择生成器和交叉编译 13.1 使用CMake构建Visual Studio 2017项目13.2 交叉编译hello world示例13.3 使用OpenMP并行化交叉编译Windows二进制文件 第14章 测试面板 14.1 将测试部署到CDash14.2 CDash显示测试覆盖率14.3 使用AddressSanifier向CDash报告内存缺陷14.4 使用ThreadSaniiser向CDash报告数据争用 第15章 使用CMake构建已有项目 15.1 如何开始迁移项目15.2 生成文件并编写平台检查15.3 检测所需的链接和依赖关系15.4 复制编译标志15.5 移植测试15.6 移植安装目标15.7 进一步迁移的措施15.8 项目转换为CMake的常见问题 第16章 可能感兴趣的书 16.1 留下评论——让其他读者知道你的想法