CMake + Ninja 构建程序示例

Ninja简介

Ninja 是一种专注于速度的小型构建系统,特别适合用于大型项目的增量编译。它最初由 Google 的工程师为加速 Chromium 浏览器的构建过程而开发,并逐渐成为一种广泛使用的替代构建工具,尤其是在配合 CMake 等高级构建配置工具时。
在这里插入图片描述

主要特点

  1. 高效性:Ninja 专注于尽可能快地执行构建任务,通过并行处理和最小化解析时间来加速构建过程。

  2. 简单性:Ninja 文件格式设计得非常简单直接,旨在快速加载和执行。这与 CMake 这样的工具形成对比,后者生成复杂的构建文件,但依赖于像 Ninja 或 Make 这样的构建系统来实际执行构建。

  3. 跨平台支持:Ninja 支持多种操作系统,包括 Windows、macOS 和 Linux,使其成为一个理想的跨平台构建解决方案。

  4. 作为其他构建系统的后端:许多现代构建系统(如 CMake)可以生成 Ninja 构建文件,利用 Ninja 来提高构建效率。

使用场景

  • 当你使用 CMake 管理项目并且希望加快构建速度时,可以选择让 CMake 生成 Ninja 构建文件而不是传统的 Makefile。
  • 在需要频繁进行代码修改和测试的情况下,Ninja 能够显著减少增量构建的时间。
  • 对于大型项目或拥有大量源文件的项目,Ninja 提供了比传统 Make 更好的性能表现。

安装与使用

在大多数平台上,你可以轻松安装 Ninja:

  • Linux: 使用包管理器,例如 sudo apt-get install ninja-build
  • macOS: 可以通过 Homebrew 安装,运行 brew install ninja
  • Windows: 可以通过 Chocolatey (choco install ninja) 或者直接从 Ninja 的 GitHub 发布页面下载二进制文件。

一旦安装完毕,在使用 CMake 配置项目时,可以通过指定 -G Ninja 参数来选择 Ninja 作为生成的构建系统:
下面是一个使用 CMake + Ninja 构建的简单 Hello World C++ 程序示例

📁 项目结构

hello-world/
├── CMakeLists.txt
└── main.cpp

✅ 步骤一:编写 main.cpp

// main.cpp
#include <iostream>

int main() {
    std::cout << "Hello, World from CMake and Ninja!" << std::endl;
    return 0;
}

✅ 步骤二:编写 CMakeLists.txt

# 设置CMake最低版本要求
cmake_minimum_required(VERSION 3.14)

# 设置项目名称
project(HelloWorld)

# 设置C++标准
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# 添加可执行文件
add_executable(hello main.cpp)

✅ 步骤三:使用 CMake 配合 Ninja 构建项目

打开终端,进入项目目录,依次运行以下命令:

# 创建构建目录并进入
mkdir build && cd build

# 使用 CMake 生成 Ninja 构建配置
cmake -G Ninja ..

# 执行构建
ninja

✅ 运行程序

构建完成后,在 build 目录下会生成一个名为 hello(或 hello.exe 在 Windows)的可执行文件:

./hello

输出结果:

Hello, World from CMake and Ninja!

🧠 补充说明

  • -G Ninja:告诉 CMake 使用 Ninja 构建系统。
  • Ninja 是比 Make 更快的构建后端,适合大型项目。
  • 如果你使用 IDE(如 VS Code 或 CLion),也可以配置为使用 Ninja 后端。

能 CMake + make的项目,是否也可以CMake + ninja?

是的,大多数可以使用 make 构建的 CMake 项目也可以使用 ninja 构建,因为它们都只是 CMake 生成的不同构建后端。

✅ 简单回答:

能用 cmake + make 构建的项目,通常也能用 cmake + ninja 构建。

你只需要在配置阶段告诉 CMake 使用 Ninja 作为构建系统即可:

cmake -G "Ninja" ..

然后使用 ninja 命令进行构建:

ninja

🧠 详细解释

🔁 CMake 的作用

CMake 是一个“元构建系统”(meta build system),它不会直接编译代码,而是根据 CMakeLists.txt 文件生成适用于不同构建工具的配置文件。

  • 如果你使用:

    cmake ..
    

    默认会生成适用于 makeMakefile(在 Unix-like 系统上)。

  • 如果你使用:

    cmake -G "Ninja" ..
    

    它会生成 .ninja 配置文件供 ninja 使用。

🚀 为什么选择 Ninja?

相比传统的 makeNinja 更快、更高效,尤其适合大型项目,原因包括:

  • 更小、更高效的构建描述文件
  • 更好的并行支持
  • 更快的增量构建速度

🛠 示例对比

使用 make
mkdir build && cd build
cmake ..                # 生成 Makefile
make                    # 使用 make 构建
使用 ninja
mkdir build && cd build
cmake -G Ninja ..       # 生成 .ninja 文件
ninja                   # 使用 ninja 构建

⚠️ 注意事项

  1. 需要安装 Ninja

    • Linux: sudo apt install ninja-build
    • macOS: brew install ninja
    • Windows: 可通过 choco install ninja 或使用 Python pip: pip install ninja
  2. 确保有合适的编译器

    • gcc, clang, MSVC
  3. 有些 IDE 默认使用 Ninja

    • 比如 VS Code + CMake 插件、CLion 等默认就使用 Ninja 构建系统

✅ 总结

工具链是否兼容
cmake + make✅ 支持
cmake + ninja✅ 同样支持
转换难度🔧 极低

如果你有一个已有的 make 项目,想换成 ninja,只需重新配置一次即可:

rm -rf build && mkdir build && cd build
cmake -G Ninja ..
ninja
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值