[中文正文内容]

入门指南 * 安装 CMake * 运行 CMake * 应该做和不应该做的事 * CMake 的新特性

基础知识 * 基础知识介绍 * 变量和缓存 * CMake 编程 * 与代码通信 * 如何组织你的项目 * 运行其他程序 * 一个简单的例子

额外功能 * 添加功能 * C++11 及更高版本 * 添加功能 * CCache 和实用工具 * 有用的模块 * 支持 IDE * 调试代码

使用其他项目 * 包含小型项目 * Git Submodule 方法 * 下载项目 * FetchContent (CMake 3.11+)

测试 * 测试 * GoogleTest * Catch

导出和安装 * 导出和安装 * 安装 * 导出 * 打包

库 * 查找包 * CUDA * OpenMP * Boost library * MPI * ROOT * Minuit2

*   [ Repository ](https://cliutils.gitlab.io/modern-cmake/<https:/gitlab.com/CLIUtils/modern-cmake>)
*   [ Open issue ](https://cliutils.gitlab.io/modern-cmake/<https:/gitlab.com/CLIUtils/modern-cmake/-/issues/new?issue\[title\]=Issue%20on%20page%20%2FREADME.html&issue\[description\]=Your%20issue%20content%20here.>)

*   [ .md ](https://cliutils.gitlab.io/modern-cmake/<_sources/README.md>)
*   .pdf

浅色 深色 系统设置

现代 CMake 入门

目录

现代 CMake 入门

人们总是喜欢吐槽构建系统。看看 CppCon17 的演讲,就能看到开发者们拿构建系统开玩笑。这引出了一个问题:为什么?当然,构建过程中存在很多问题。但我认为我们有一个非常好的解决方案可以解决其中的一些问题,那就是 CMake。但不是 CMake 2.8;它发布于 C++11 甚至存在之前!也不是那些糟糕的 CMake 示例(甚至包括 KitWare 官方教程列表中的)。我说的是现代 CMake。CMake 3.15+,甚至 CMake 4.0+!它简洁、强大、优雅,因此您可以将大部分时间用于编码,而不是向无法阅读、无法维护的 Make(或 CMake 2)文件添加行。

注意 本书是一个活文档。您可以在 GitLab 上提出问题或提交合并请求。您也可以下载 PDF 副本。请务必查看 HSF CMake Training

简而言之,如果您正在考虑使用现代 CMake,那么您脑海中最有可能出现的问题如下:

为什么我需要一个好的构建系统?

以下任何一项适用于您吗?

如果是,您将受益于类似 CMake 的构建系统。

为什么答案必须是 CMake?

构建系统是一个热门话题。当然,有很多选择。但即使是一个非常好的构建系统,或者一个重用熟悉的语法的系统,也无法与 CMake 相提并论。为什么?支持。每个 IDE 都支持 CMake(或者 CMake 支持该 IDE)。使用 CMake 的软件包比任何其他系统都多。因此,如果您使用的库旨在包含在您的代码中,那么您有两个选择:制作自己的构建系统,或者使用提供的构建系统之一,而这几乎总是包括 CMake。如果您包含多个项目,这将很快成为共同点。而且,如果您需要预装的库,那么它拥有 find CMake 脚本或 config CMake 脚本的可能性非常大。

我是否应该支持尽可能旧的版本?

简短回答:不。

如果您将 CMake 的最低版本设置得太低,CMake 将生成警告甚至错误。您可以将其设置为的最低版本是 3.5,CMake 4.0 开始,任何低于 3.10 的版本都会产生警告。虽然用户可以通过将 CMAKE_POLICY_VERSION_MINIMUM 设置为有效版本来紧急规避此问题,但您不希望用户这样做。

您确实应该至少使用编译器发布之后的 CMake 版本,因为它需要知道该版本的编译器标志等等。而且,由于 CMake 会将自己降级到 CMake 文件中所需的最低版本,因此安装新的 CMake,即使是系统范围内的安装,也是非常安全的。您至少应该在本地安装它。这很容易(在许多情况下只需 1-2 行),而且您会发现 5 分钟的工作可以节省数百行代码和数小时的 CMakeLists.txt 编写时间,并且从长远来看也更容易维护。

好的最低要求的快速摘要(书中包含更多详细信息):

始终将最大版本设置为您测试的最高版本(如 4.0)。这会一直有效,直到 CMake 从其支持窗口中删除最大版本,而不是最小版本!

本书试图解决您在网上找到的糟糕示例和最佳实践泛滥的问题。

其他资源

本书原作者的其他资料:

还有一些其他地方可以找到关于 web 的优秀信息。以下是其中一些:

鸣谢

Modern CMake 最初由 Henry Schreiner 编写。其他贡献者可以在 GitLab 上找到

下一页 安装 CMake

目录

作者 Henry Schreiner © 版权所有 2024。