cmake生成build.ninja文件,ninja执行构建,本质是“生成器+构建器”分工;关键用cmake -g ninja ..指定生成器,再运行ninja编译。

CMake 本身不执行构建,它只生成构建文件;Ninja 是真正干活的构建工具。 所以“配合使用”的本质是:用 cmake 生成 build.ninja 文件,再用 ninja 命令去执行它。不是插件关系,也不是运行时集成,而是标准的“生成器 + 构建器”分工。
怎么让 cmake 生成 Ninja 文件而不是 Makefile
关键在 -G 参数,必须显式指定 Ninja 生成器:
-
cmake -G "Ninja" ..(Linux/macOS 推荐,引号可省略) -
cmake -G Ninja ..(Windows cmd 下建议加引号,避免空格问题) - 如果项目根目录有
CMakeLists.txt,且你在build/目录中执行命令,路径..指向源码目录 - 错误写法:
cmake -GNinja ..(少空格)或cmake -G Ninja-build ..(名字错)都会报错CMake Error: Could not create named generator
ninja 命令和 make 命令的对应关系
ninja 默认构建所有 add_executable 和 add_library 目标,行为类似 make all,但没有隐式 all 目标概念:
组合式C++代码评审方案,融合静态分析、AI推理、多轮迭代评审和C++专项检查,适用于PR审查、增量代码审查、全项目评审和代码质量评分,触发词包括review cpp、cpp代码评审、C++review、代码审查。
-
ninja→ 编译全部可执行文件和库(等价于make) -
ninja my_target→ 只构建名为my_target的目标(注意大小写、下划线要和add_executable(my_target ...)完全一致) -
ninja clean→ 不支持,Ninja 没有内置clean;正确做法是删掉整个构建目录,或用cmake -P cmake_clean.cmake脚本 -
ninja -j4→ 强制指定 4 个并行任务(默认是nproc或os.cpu_count())
为什么 cmake .. && ninja 会失败
常见失败不是 Ninja 问题,而是 CMake 阶段就出错了,但新手容易误判:
- 报错
Could NOT find XXX(如Could NOT find Threads)→ 是cmake配置失败,ninja根本没启动 - 报错
ninja: error: loading 'build.ninja': No such file or directory→ 说明cmake -G Ninja没成功运行,或当前目录不对 - 修改
CMakeLists.txt后直接ninja→ 大概率不生效,必须先重新运行cmake ..(Ninja 不自动 reconfigure) - 混用生成器:比如先用
cmake -G "Unix Makefiles",再用cmake -G "Ninja",会导致缓存冲突,建议每次换生成器都清空构建目录
最常被忽略的一点:Ninja 不读 CMakeLists.txt,也不解析它;它只忠实执行 build.ninja 里写的命令。所以 CMake 配置逻辑写错,Ninja 会照错执行——问题根源永远在 CMake 阶段,不在 Ninja 本身。










