deepwzh的技术笔记
  • Golang
  • Python
  • Cpp
杂项
前端开发
  • 计算机网络
  • 操作系统
  • 数据库
云原生
Devops
AIGC
关于作者
  • Golang
  • Python
  • Cpp
杂项
前端开发
  • 计算机网络
  • 操作系统
  • 数据库
云原生
Devops
AIGC
关于作者
  • Cpp
  • c++ 模块
  • 类

    • 类
    • 友元
  • 开发工具

    • 开发工具
    • Vscode

      • Vscode
      • vscode 相关插件
  • 协程

    • 协程
    • test
  • 构建工具

    • 构建工具
    • Make
    • Cmake

      • Cmake
      • 常见问题
      • cmake 基本用法
      • cmake 集成 conan
      • cmake 生成器
      • cmake 库查找
  • 链接库

    • 链接库
    • 动态链接库
  • 编译器

    • 编译器
    • gcc

      • gcc
      • 常用选项
  • 包管理工具

    • 包管理工具
    • Canan

cmake 生成器

概述

CMake 作为跨平台的自动化构建工具,生成器是其核心功能之一,能将 CMake 代码转化为不同平台的构建文件。

CMake 生成器的核心作用是将 CMakeLists.txt 文件中定义的项目配置和构建规则,转化为目标平台或构建工具可识别的构建文件,如 Makefile、Visual Studio 解决方案文件、Xcode 项目文件等。不同的生成器适用于不同的平台和开发环境,用户可根据项目需求灵活选择。

常见 CMake 生成器介绍

Unix Makefiles

Unix Makefiles 是最常用的生成器之一,适用于类 Unix 系统(如 Linux、macOS)。它会生成传统的 Makefile 文件,用户可以通过 make 命令进行构建。这种生成器适用于命令行开发环境,对于习惯使用 make 工具的开发者来说,操作流程熟悉且便捷。例如,在一个基于 Linux 的 C++ 项目中,使用该生成器生成 Makefile 后,只需执行 make 命令,即可按照定义好的规则编译源代码、链接库文件,最终生成可执行程序。

Ninja

Ninja 是一款专注于速度的构建系统,Ninja 生成器能够快速生成高效的构建文件。与传统的 make 相比,Ninja 采用了更简洁的语法和优化的构建算法,在大规模项目构建时能够显著缩短编译时间。在现代软件开发中,尤其是涉及大量源代码和复杂依赖关系的项目,Ninja 生成器受到越来越多开发者的青睐。例如,在某些开源项目的构建过程中,使用 Ninja 生成器可以将原本需要数小时的编译时间缩短至几十分钟。

Visual Studio 生成器系列

Visual Studio 是 Windows 平台上常用的集成开发环境(IDE),CMake 提供了多个针对不同版本 Visual Studio 的生成器,如 Visual Studio 16 2019、Visual Studio 17 2022 等。这些生成器会创建 .sln 解决方案文件和 .vcxproj 项目文件,用户可以在 Visual Studio 中直接打开项目进行开发、调试和构建。通过这种方式,开发者能够充分利用 Visual Studio 强大的可视化调试、代码智能提示等功能,极大提升 Windows 平台下的开发效率。

Xcode

Xcode 生成器用于生成适用于 macOS 和 iOS 开发的 Xcode 项目文件。对于 Mac 平台上的 Objective-C 或 Swift 项目,使用该生成器能够方便地将项目集成到 Xcode 开发环境中,借助 Xcode 丰富的开发工具和模拟器,进行应用的开发、测试和发布。例如,在开发一款 iOS 应用时,使用 Xcode 生成器创建项目文件后,即可在 Xcode 中进行界面设计、代码编写和功能调试。

MinGW Makefiles

MinGW(Minimalist GNU for Windows)是一套用于在 Windows 系统上编译和运行 GNU 工具的环境,MinGW Makefiles 生成器会生成适用于 MinGW 环境的 Makefile 文件。通过这种方式,开发者可以在 Windows 系统上使用类 Unix 的开发工具和构建流程,方便地将开源项目移植到 Windows 平台,同时保持与 Linux、macOS 等系统相似的开发体验。

相关参数

-G 选项是 CMake 命令行中用于指定生成器的关键参数,其基本语法为 cmake -G "Generator Name" [source_path]。其中,Generator Name 是目标生成器的名称,source_path 是包含 CMakeLists.txt 文件的项目源目录路径(如果省略,则默认为当前目录)。

获取可用生成器列表

在使用 -G 选项前,用户可以通过 cmake -G 命令查看当前系统支持的所有生成器列表。

# cmake -G
CMake Error: No generator specified for -G

Generators
  Green Hills MULTI            = Generates Green Hills MULTI files
                                 (experimental, work-in-progress).
* Unix Makefiles               = Generates standard UNIX makefiles.
  Ninja                        = Generates build.ninja files.
  Ninja Multi-Config           = Generates build-<Config>.ninja files.
  Watcom WMake                 = Generates Watcom WMake makefiles.
  CodeBlocks - Ninja           = Generates CodeBlocks project files
                                 (deprecated).
  CodeBlocks - Unix Makefiles  = Generates CodeBlocks project files
                                 (deprecated).
  CodeLite - Ninja             = Generates CodeLite project files
                                 (deprecated).
  CodeLite - Unix Makefiles    = Generates CodeLite project files
                                 (deprecated).
  Eclipse CDT4 - Ninja         = Generates Eclipse CDT 4.0 project files
                                 (deprecated).
  Eclipse CDT4 - Unix Makefiles= Generates Eclipse CDT 4.0 project files
                                 (deprecated).
  Kate - Ninja                 = Generates Kate project files (deprecated).
  Kate - Ninja Multi-Config    = Generates Kate project files (deprecated).
  Kate - Unix Makefiles        = Generates Kate project files (deprecated).
  Sublime Text 2 - Ninja       = Generates Sublime Text 2 project files
                                 (deprecated).
  Sublime Text 2 - Unix Makefiles
                               = Generates Sublime Text 2 project files
                                 (deprecated).

在不同的操作系统下显示的列表可能不同,比 windows 下会包含 visual studio

指定生成器

假设我们有一个 C++ 项目,项目根目录下包含 CMakeLists.txt 文件。若要使用 Unix Makefiles 生成器,在命令行中进入项目根目录,执行 cmake -G "Unix Makefiles" .,其中 . 表示当前目录。此时,CMake 会在当前目录下生成 Makefile 文件,后续通过 make 命令即可进行构建。

如果要使用 Visual Studio 17 2022 生成器创建 Visual Studio 2022 项目文件,在命令行中执行 cmake -G "Visual Studio 17 2022" C:\path\to\project(将 C:\path\to\project 替换为实际的项目路径),CMake 会在指定路径下生成 .sln 和 .vcxproj 文件,供 Visual Studio 2022 打开和使用。

Prev
cmake 集成 conan
Next
cmake 库查找