c++ Ninja构建系统怎么用 c++加速CMake编译【工具】

20次阅读

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

c++ Ninja构建系统怎么用 c++加速CMake编译【工具】

Ninja 是一个专注速度的小型构建系统,配合 CMake 使用能显著减少编译时间——它不自己解析源码,而是由 CMake 生成 Ninja 构建文件(build.ninja),再由 Ninja 高效执行。关键不是“用 C++ 写 Ninja”,而是“用 Ninja 加速 C++ 项目的 CMake 编译”。

1. 安装 Ninja 并确保 CMake 能识别它

Ninja 本身是独立可执行程序(ninja),和语言无关。CMake 只需调用它即可:

  • linux/macOS:用包管理器安装,例如 sudo apt install ninja-buildubuntu)或 brew install ninja(macos
  • windows:下载 ninja.exe,放入 PATH 目录(如 C:windows 或用户 bin 目录)
  • 验证:终端运行 ninja --version,有输出即成功;CMake 会自动检测到它

2. 用 CMake 生成 Ninja 构建文件

不再用 makevisual 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%。

text=ZqhQzanResources