CMake + Ninja 构建程序示例
Ninja简介
Ninja 是一种专注于速度的小型构建系统,特别适合用于大型项目的增量编译。它最初由 Google 的工程师为加速 Chromium 浏览器的构建过程而开发,并逐渐成为一种广泛使用的替代构建工具,尤其是在配合 CMake 等高级构建配置工具时。
主要特点
-
高效性:Ninja 专注于尽可能快地执行构建任务,通过并行处理和最小化解析时间来加速构建过程。
-
简单性:Ninja 文件格式设计得非常简单直接,旨在快速加载和执行。这与 CMake 这样的工具形成对比,后者生成复杂的构建文件,但依赖于像 Ninja 或 Make 这样的构建系统来实际执行构建。
-
跨平台支持:Ninja 支持多种操作系统,包括 Windows、macOS 和 Linux,使其成为一个理想的跨平台构建解决方案。
-
作为其他构建系统的后端:许多现代构建系统(如 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 ..
默认会生成适用于
make
的Makefile
(在 Unix-like 系统上)。 -
如果你使用:
cmake -G "Ninja" ..
它会生成
.ninja
配置文件供ninja
使用。
🚀 为什么选择 Ninja?
相比传统的 make
,Ninja 更快、更高效,尤其适合大型项目,原因包括:
- 更小、更高效的构建描述文件
- 更好的并行支持
- 更快的增量构建速度
🛠 示例对比
使用 make
mkdir build && cd build
cmake .. # 生成 Makefile
make # 使用 make 构建
使用 ninja
mkdir build && cd build
cmake -G Ninja .. # 生成 .ninja 文件
ninja # 使用 ninja 构建
⚠️ 注意事项
-
需要安装 Ninja
- Linux:
sudo apt install ninja-build
- macOS:
brew install ninja
- Windows: 可通过
choco install ninja
或使用 Python pip:pip install ninja
- Linux:
-
确保有合适的编译器
- 如
gcc
,clang
,MSVC
等
- 如
-
有些 IDE 默认使用 Ninja
- 比如 VS Code + CMake 插件、CLion 等默认就使用 Ninja 构建系统
✅ 总结
工具链 | 是否兼容 |
---|---|
cmake + make | ✅ 支持 |
cmake + ninja | ✅ 同样支持 |
转换难度 | 🔧 极低 |
如果你有一个已有的 make
项目,想换成 ninja
,只需重新配置一次即可:
rm -rf build && mkdir build && cd build
cmake -G Ninja ..
ninja