CMake 系列(二):切换构建生成器

CMake 是一个构建系统生成器,可以使用单个 CMakeLists.txt 为不同平台上的不同工具集配置项目。您可以在 CMakeLists.txt 中描述构建系统必须执行的操作,以配置并编译代码;基于这些指令,CMake 将为所选的构建系统(Unix Makefile、Ninja、Visual Studio 等)生成相应的指令,后面的章节中我们还会重新讨论生成器。本篇将展示为项目切换生成器是多么容易。

提示:本示例在 CMake 3.5 或更高版本中有效,并已在 GNU/Linux、macOS 和 Windows 上测试通过。

准备工作

CMake 针对不同平台支持一系列本地构建工具,既支持命令行工具(如 Unix Makefile 和 Ninja),也支持集成开发环境(IDE)工具。使用以下命令,可以在当前平台上找到生成器名单,以及已安装的 CMake 版本:

$ cmake --help

这个命令的输出会列出 CMake 命令行界面上所有的选项,您会在其中找到可用生成器的列表。例如,安装了 CMake 3.11.2 的 GNU/Linux 机器上,生成器部分的输出(节选)如下:

Generators
The following generators are available on this platform (* marks default):
* Unix Makefiles               = Generates standard UNIX makefiles.
  Ninja                        = Generates build.ninja files.
  CodeBlocks - Ninja           = Generates CodeBlocks project files.
  CodeBlocks - Unix Makefiles  = Generates CodeBlocks project files.
  ...

具体实施

我们将重用上一篇示例中的 hello-world.cpp 和 CMakeLists.txt。唯一的区别在于调用 CMake 的方式:现在必须显式地使用命令行选项 -G 来切换生成器。

首先,使用以下步骤配置项目:

$ mkdir -p build
$ cd build
$ cmake .. -G Ninja

第二步,构建项目:

$ cmake --build .

工作原理

与前面的配置相比,每一步的输出没什么变化。但每个生成器都有自己的文件集,所以编译步骤的输出和构建目录的内容是不同的:

  • build.ninja 和 rules.ninja:包含 Ninja 所有的构建语句和构建规则。
  • CMakeCache.txt:CMake 会在该文件中进行缓存,与生成器无关。
  • CMakeFiles:包含由 CMake 在配置期间生成的临时文件。
  • cmake_install.cmake:处理安装规则的 CMake 脚本,在安装时使用。

此外,cmake --build . 会将 ninja 命令封装在一个跨平台的接口中。

后面的章节中,我们还会讨论可选生成器和交叉编译。

系列导航


   转载规则


《CMake 系列(二):切换构建生成器》 由 吴杭沉 采用 知识共享署名 4.0 国际许可协议 进行许可。
 上一篇
CMake 系列(三):构建和链接静态库与动态库 CMake 系列(三):构建和链接静态库与动态库
上一篇中,我们只用单个源文件构建可执行文件。实际项目中往往会有多个源文件,通常分布在不同子目录中。这种实践有助于理顺项目的源代码结构,支持模块化、代码重用和关注点分离,还可以简化并加速项目的重新编译。本篇将展示如何将源代码编译成库,以及如何
2022-03-29
下一篇 
CMake 系列(一):编译第一个可执行文件 CMake 系列(一):编译第一个可执行文件
本篇将演示如何用 CMake 配置并构建一个最简单的项目:整个项目只有一个源文件,最终生成一个可执行文件。我们以 C++ 为例进行讨论。 提示:本示例在 CMake 3.5 或更高版本中有效,并已在 GNU/Linux、macOS 和 W
2022-03-15
  目录