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