# CMake Cookbook

## CMake Cookbook

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