Ninja 是配合 CMake 使用的高速构建系统,通过 CMake 生成 build.ninja 文件后由 Ninja 执行编译,显著缩短中大型 C++ 项目构建时间。

Ninja 是一个专注速度的小型构建系统,配合 CMake 使用能显著减少编译时间——它不自己解析源码,而是由 CMake 生成 Ninja 构建文件(build.ninja),再由 Ninja 高效执行。关键不是“用 C++ 写 Ninja”,而是“用 Ninja 加速 C++ 项目的 CMake 编译”。
1. 安装 Ninja 并确保 CMake 能识别它
Ninja 本身是独立可执行程序(ninja),和语言无关。CMake 只需调用它即可:
- Linux/macOS:用包管理器安装,例如
sudo apt install ninja-build(Ubuntu)或brew install ninja(macOS) - Windows:下载 ninja.exe,放入
PATH目录(如C:\Windows或用户 bin 目录) - 验证:终端运行
ninja --version,有输出即成功;CMake 会自动检测到它
2. 用 CMake 生成 Ninja 构建文件
不再用 make 或 Visual Studio 生成器,改用 -G Ninja:
- 新建构建目录:
mkdir build && cd build - 生成 Ninja 文件:
cmake -G Ninja ..(若项目含CMakeLists.txt) - 可选加速参数:
cmake -G Ninja -DCMAKE_BUILD_TYPE=Release .. - 完成后,当前目录下会出现
build.ninja和其他中间文件
3. 用 Ninja 编译、测试、安装
所有操作都通过 ninja 命令完成,比 make 更快且默认并行:
立即学习“C++免费学习笔记(深入)”;
- 编译全部目标:
ninja(等价于ninja all,自动多核满载) - 只编译某个可执行文件:
ninja my_app - 运行测试:
ninja test(前提是 CMake 中启用了enable_testing()) - 安装:
ninja install(需提前设置CMAKE_INSTALL_PREFIX) - 清理:
ninja clean(比make clean更精准,只删 Ninja 知道要删的)
4. 进阶提速技巧(真实有效)
Ninja 本身已极快,但配合以下设置可进一步压榨性能:
-
禁用编译器检查:首次 configure 后,后续修改代码只需
ninja,不用重复 cmake -
启用 ccache(推荐):在 CMake 配置时加
-DCMAKE_CXX_COMPILER_LAUNCHER=ccache,缓存重复编译 -
控制并发数:
ninja -j8显式指定线程数(默认是 CPU 核心数 × 2,有时设为物理核数更稳) -
跳过无关目标:大型项目中,用
ninja my_lib只构建依赖项,避免全量编译
不复杂但容易忽略:Ninja 的优势不在语法,而在设计——无状态、无隐式规则、依赖图静态明确。只要 CMake 生成正确,Ninja 就几乎零开销执行。对中大型 C++ 项目,从 Make 切换到 Ninja,clean + rebuild 时间常能缩短 30%~50%。











