返回介绍

1.2 切换生成器

发布于 2025-05-06 21:45:53 字数 3135 浏览 0 评论 0 收藏

NOTE : 此示例代码可以在 https://github.com/dev-cafe/cmake-cookbook/tree/v1.0/chapter-01/recipe-02 中找到,其中有一个 C++、C 和 Fortran 示例。该配置在 CMake 3.5 版(或更高版本) 下测试没问题,并且已经在 GNU/Linux、macOS 和 Windows 上进行了测试。

CMake 是一个构建系统生成器,可以使用单个 CMakeLists.txt 为不同平台上的不同工具集配置项目。您可以在 CMakeLists.txt 中描述构建系统必须运行的操作,以配置并编译代码。基于这些指令,CMake 将为所选的构建系统(Unix Makefile、Ninja、Visual Studio 等等) 生成相应的指令。我们将在第 13 章中重新讨论生成器。

准备工作

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

$ cmake --help

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

Generators
The following generators are available on this platform:
Unix Makefiles = Generates standard UNIX makefiles.
Ninja = Generates build.ninja files.
Watcom WMake = Generates Watcom WMake makefiles.
CodeBlocks - Ninja = Generates CodeBlocks project files.
CodeBlocks - Unix Makefiles = Generates CodeBlocks project files.
CodeLite - Ninja = Generates CodeLite project files.
CodeLite - Unix Makefiles = Generates CodeLite project files.
Sublime Text 2 - Ninja = Generates Sublime Text 2 project files.
Sublime Text 2 - Unix Makefiles = Generates Sublime Text 2 project files.
Kate - Ninja = Generates Kate project files.
Kate - Unix Makefiles = Generates Kate project files.
Eclipse CDT4 - Ninja = Generates Eclipse CDT 4.0 project files.
Eclipse CDT4 - Unix Makefiles= Generates Eclipse CDT 4.0 project files.

使用此示例,我们将展示为项目切换生成器是多么 EASY 。

具体实施

我们将重用前一节示例中的 hello-world.cppCMakeLists.txt 。惟一的区别在使用 CMake 时,因为现在必须显式地使用命令行方式,用 -G 切换生成器。

  1. 首先,使用以下步骤配置项目:
    $ mkdir -p build
    $ cd build
    $ cmake -G Ninja ..
    ​
    -- The CXX compiler identification is GNU 8.1.0
    -- Check for working CXX compiler: /usr/bin/c++
    -- Check for working CXX compiler: /usr/bin/c++ -- works
    -- Detecting CXX compiler ABI info
    -- Detecting CXX compiler ABI info - done
    -- Detecting CXX compile features
    -- Detecting CXX compile features - done
    -- Configuring done
    -- Generating done
    -- Build files have been written to: /home/user/cmake-cookbook/chapter-01/recipe-02/cxx-exampl
  2. 第二步,构建项目:
    $ cmake --build .
    ​
    [2/2] Linking CXX executable hello-world

如何工作

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

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

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

更多信息

我们将在第 13 章中讨论可选生成器和交叉编译。

要了解关于生成器的更多信息,CMake 官方文档是一个很好的选择: https://cmake.org/cmake/help/latest/manual/cmake-generators.7.html

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。