目录
0.引言(Intro)
0.1 本文写作目的
0.2 本文目录
0.3 本文适合人群
0.引言(Intro)
0.1 本文写作目的
软件世界和我们用来创建软件的工具每一天都在不断发展。 CMake 在这里也不例外,经过 20 多年的不断发展,它现在可以被认为是构建 C++ 应用程序的行业标准。
虽然 CMake 功能丰富文档全面。但是关于如何使用这些功能的全面、真实的示例和指南很少见。这就是本文写作的目的。
本文没有解释 CMake 的每一个细节和特性,而是包含示例来说明 CMake 如何在构建软件时最适合各种任务,而无需涵盖每一个边缘情况。本文的目的是让事情尽可能简单,同时涵盖完成工作的推荐最佳实践。您无需了解 CMake 的所有功能即可完成日常任务。
我们将尝试首先解释一个概念,然后用具体的例子来说明它。这样,您将通过实践学习,并能够将这些知识应用到您使用 CMake 进行的日常工作中。由于本文的读者主要是工程师(调试项目困难的研究生),因此我们对本文的内容进行了相应的调整。在编写本文时,我们首先是软件工程师,然后才是作者。因此,本书的内容比理论更实用。它是精心挑选的、经过验证的技术的汇编,您可以在日常 CMake 工作流程中使用这些技术。
0.2 本文目录
第 1 章,Kickstarting CMake,简要解释了 CMake 是什么,然后直接进入安装 CMake 并使用 CMake 构建一些东西。你将学习如何手动安装最新的稳定版本。您还将了解 CMake 背后的基本概念以及为什么它是构建系统生成器而不是构建系统本身。您将了解它如何适应使用 C++(和 C)进行的现代软件开发。
第 2 章,以最佳方式访问 CMake,展示了如何通过 GUI 以最佳方式从命令行使用 CMake,以及 CMake 如何与一些常见的 IDE 和编辑器集成。
第 3 章,创建 CMake 项目,指导您设置项目以构建可执行文件和库并将两者链接在一起。
第 4 章,打包、部署和安装 CMake 项目,向您展示如何创建软件项目的可分发版本。您将学习如何使用 CMake 和 CPack(CMake 的打包程序)添加安装说明和打包项目。
第 5 章,集成第三方库和依赖管理,解释了如何将现有的第三方库集成到您的项目中。它还向您展示了如何添加已安装在系统上的库、外部 CMake 项目和非 CMake 项目。
第 6 章,自动生成文档,探讨如何使用 CMake 从代码生成文档,作为使用 doxygen、dot (graphviz) 和 plantuml 构建过程的一部分。
第 7 章,将代码质量工具与 CMake 无缝集成,向您展示如何将单元测试、代码清理器、静态代码分析和代码覆盖工具集成到您的项目中。它将向您展示 CMake 如何帮助发现和执行测试。
第 8 章,使用 CMake 执行自定义任务,解释了如何将几乎所有工具集成到构建过程中。您将学习如何将外部程序包装到自定义目标中或将它们挂接到构建过程中以执行它们。我们将介绍自定义任务如何用于生成文件以及它们如何使用其他目标生成的文件。您还将学习如何在配置 CMake 构建期间执行系统命令,以及如何使用 CMake 脚本模式创建与平台无关的命令。
第 9 章,创建可重现的构建环境,展示了如何构建可在各种机器(包括 CI/CD 管道)之间移植的环境,以及如何使用 Docker、sysroots 和 CMake 预设来使构建在任何地方“开箱即用”。
第 10 章,在 Superbuild 中处理大型项目和分布式存储库,简化了使用 CMake 管理分布在多个 git 存储库中的项目。您将学习如何创建允许您构建特定版本以及最新的夜间构建的超级构建。您将探索它需要哪些先决条件以及如何将它们结合起来。
第 11 章,使用 CMake 进行自动化模糊测试,展示了如何将模糊测试工具与 CMake 集成和使用。
第 12 章,跨平台编译和自定义工具链,演示了如何使用跨平台工具链。您还将学习如何编写自己的工具链定义并方便地将不同的工具链与 CMake 一起使用。
第 13 章,重用 CMake 代码,解释 CMake 模块以及如何概括 CMake 文件。您将学习如何编写广泛使用的模块,这些模块可以从您的项目中单独发布。
第 14 章,优化和维护 CMake 项目,建议如何缩短构建时间,并提供长期保持 CMake 项目整洁的提示和技巧。
第 15 章,迁移到 CMake,解释了有关如何将大型现有代码库迁移到 CMake 而无需完全停止开发的高级策略。
0.3 本文适合人群
不建议初学C++的同学学,最好有一定的代码基础,经常被cmake的各种奇怪的错误迷惑,准备写大型项目或者做代码移植的同学学习,此项目一周一更。
软件世界和我们用来创建软件的工具每一天都在不断发展。 CMake 在这里也不例外,经过 20 多年的不断发展,它现在可以被认为是构建 C++ 应用程序的行业标准。
虽然 CMake 功能丰富文档全面。但是关于如何使用这些功能的全面、真实的示例和指南很少见。这就是本文写作的目的。本文没有解释 CMake 的每一个细节和特性,而是包含示例来说明 CMake 如何在构建软件时最适合各种任务,而无需涵盖每一个边缘情况。本文的目的是让事情尽可能简单,同时涵盖完成工作的推荐最佳实践。您无需了解 CMake 的所有功能即可完成日常任务。
我们将尝试首先解释一个概念,然后用具体的例子来说明它。这样,您将通过实践学习,并能够将这些知识应用到您使用 CMake 进行的日常工作中。由于本文的读者主要是工程师(调试项目困难的研究生),因此我们对本文的内容进行了相应的调整。在编写本文时,我们首先是软件工程师,然后才是作者。因此,本书的内容比理论更实用。它是精心挑选的、经过验证的技术的汇编,您可以在日常 CMake 工作流程中使用这些技术。
0.2 本文目录
第 1 章,Kickstarting CMake,简要解释了 CMake 是什么,然后直接进入安装 CMake 并使用 CMake 构建一些东西。你将学习如何手动安装最新的稳定版本。您还将了解 CMake 背后的基本概念以及为什么它是构建系统生成器而不是构建系统本身。您将了解它如何适应使用 C++(和 C)进行的现代软件开发。
第 2 章,以最佳方式访问 CMake,展示了如何通过 GUI 以最佳方式从命令行使用 CMake,以及 CMake 如何与一些常见的 IDE 和编辑器集成。
第 3 章,创建 CMake 项目,指导您设置项目以构建可执行文件和库并将两者链接在一起。
第 4 章,打包、部署和安装 CMake 项目,向您展示如何创建软件项目的可分发版本。您将学习如何使用 CMake 和 CPack(CMake 的打包程序)添加安装说明和打包项目。
第 5 章,集成第三方库和依赖管理,解释了如何将现有的第三方库集成到您的项目中。它还向您展示了如何添加已安装在系统上的库、外部 CMake 项目和非 CMake 项目。
第 6 章,自动生成文档,探讨如何使用 CMake 从代码生成文档,作为使用 doxygen、dot (graphviz) 和 plantuml 构建过程的一部分。
第 7 章,将代码质量工具与 CMake 无缝集成,向您展示如何将单元测试、代码清理器、静态代码分析和代码覆盖工具集成到您的项目中。它将向您展示 CMake 如何帮助发现和执行测试。
第 8 章,使用 CMake 执行自定义任务,解释了如何将几乎所有工具集成到构建过程中。您将学习如何将外部程序包装到自定义目标中或将它们挂接到构建过程中以执行它们。我们将介绍自定义任务如何用于生成文件以及它们如何使用其他目标生成的文件。您还将学习如何在配置 CMake 构建期间执行系统命令,以及如何使用 CMake 脚本模式创建与平台无关的命令。
第 9 章,创建可重现的构建环境,展示了如何构建可在各种机器(包括 CI/CD 管道)之间移植的环境,以及如何使用 Docker、sysroots 和 CMake 预设来使构建在任何地方“开箱即用”。
第 10 章,在 Superbuild 中处理大型项目和分布式存储库,简化了使用 CMake 管理分布在多个 git 存储库中的项目。您将学习如何创建允许您构建特定版本以及最新的夜间构建的超级构建。您将探索它需要哪些先决条件以及如何将它们结合起来。
第 11 章,使用 CMake 进行自动化模糊测试,展示了如何将模糊测试工具与 CMake 集成和使用。
第 12 章,跨平台编译和自定义工具链,演示了如何使用跨平台工具链。您还将学习如何编写自己的工具链定义并方便地将不同的工具链与 CMake 一起使用。
第 13 章,重用 CMake 代码,解释 CMake 模块以及如何概括 CMake 文件。您将学习如何编写广泛使用的模块,这些模块可以从您的项目中单独发布。
第 14 章,优化和维护 CMake 项目,建议如何缩短构建时间,并提供长期保持 CMake 项目整洁的提示和技巧。
第 15 章,迁移到 CMake,解释了有关如何将大型现有代码库迁移到 CMake 而无需完全停止开发的高级策略。
0.3 本文适合人群
不建议初学C++的同学学,最好有一定的代码基础,经常被cmake的各种奇怪的错误迷惑,准备写大型项目或者做代码移植的同学学习,此项目一周一更。
第 1 章,Kickstarting CMake,简要解释了 CMake 是什么,然后直接进入安装 CMake 并使用 CMake 构建一些东西。你将学习如何手动安装最新的稳定版本。您还将了解 CMake 背后的基本概念以及为什么它是构建系统生成器而不是构建系统本身。您将了解它如何适应使用 C++(和 C)进行的现代软件开发。
第 2 章,以最佳方式访问 CMake,展示了如何通过 GUI 以最佳方式从命令行使用 CMake,以及 CMake 如何与一些常见的 IDE 和编辑器集成。
第 3 章,创建 CMake 项目,指导您设置项目以构建可执行文件和库并将两者链接在一起。
第 4 章,打包、部署和安装 CMake 项目,向您展示如何创建软件项目的可分发版本。您将学习如何使用 CMake 和 CPack(CMake 的打包程序)添加安装说明和打包项目。
第 5 章,集成第三方库和依赖管理,解释了如何将现有的第三方库集成到您的项目中。它还向您展示了如何添加已安装在系统上的库、外部 CMake 项目和非 CMake 项目。
第 6 章,自动生成文档,探讨如何使用 CMake 从代码生成文档,作为使用 doxygen、dot (graphviz) 和 plantuml 构建过程的一部分。
第 7 章,将代码质量工具与 CMake 无缝集成,向您展示如何将单元测试、代码清理器、静态代码分析和代码覆盖工具集成到您的项目中。它将向您展示 CMake 如何帮助发现和执行测试。
第 8 章,使用 CMake 执行自定义任务,解释了如何将几乎所有工具集成到构建过程中。您将学习如何将外部程序包装到自定义目标中或将它们挂接到构建过程中以执行它们。我们将介绍自定义任务如何用于生成文件以及它们如何使用其他目标生成的文件。您还将学习如何在配置 CMake 构建期间执行系统命令,以及如何使用 CMake 脚本模式创建与平台无关的命令。
第 9 章,创建可重现的构建环境,展示了如何构建可在各种机器(包括 CI/CD 管道)之间移植的环境,以及如何使用 Docker、sysroots 和 CMake 预设来使构建在任何地方“开箱即用”。
第 10 章,在 Superbuild 中处理大型项目和分布式存储库,简化了使用 CMake 管理分布在多个 git 存储库中的项目。您将学习如何创建允许您构建特定版本以及最新的夜间构建的超级构建。您将探索它需要哪些先决条件以及如何将它们结合起来。
第 11 章,使用 CMake 进行自动化模糊测试,展示了如何将模糊测试工具与 CMake 集成和使用。
第 12 章,跨平台编译和自定义工具链,演示了如何使用跨平台工具链。您还将学习如何编写自己的工具链定义并方便地将不同的工具链与 CMake 一起使用。
第 13 章,重用 CMake 代码,解释 CMake 模块以及如何概括 CMake 文件。您将学习如何编写广泛使用的模块,这些模块可以从您的项目中单独发布。
第 14 章,优化和维护 CMake 项目,建议如何缩短构建时间,并提供长期保持 CMake 项目整洁的提示和技巧。
第 15 章,迁移到 CMake,解释了有关如何将大型现有代码库迁移到 CMake 而无需完全停止开发的高级策略。
不建议初学C++的同学学,最好有一定的代码基础,经常被cmake的各种奇怪的错误迷惑,准备写大型项目或者做代码移植的同学学习,此项目一周一更。



