Ninja 是一个以速度为唯一目标的小型构建系统,由 Google Chrome 团队工程师 Evan Martin 于 2011 年前后开发。它的构建文件通常由 CMake、GN 等工具生成而非手写,凭借极快的增量构建被 Chrome、Android 等超大型项目采用。

| 类型 | 构建系统 |
| 作者 | Evan Martin |
| 首次发布 | 2011 年前后 |
| 典型上游 | CMake / GN / Meson |
| 许可证 | Apache 2.0 |
Ninja是一个专注于执行速度的小型构建系统。与 Make 类似,它根据描述文件中的依赖关系决定哪些文件需要重新编译;不同的是,Ninja 刻意把功能做到最少,把速度做到最快,其构建文件(build.ninja)被设计为由上层工具自动生成,而非人工编写。
Ninja 由当时在 Google Chrome 团队工作的 Evan Martin 开发,2011 年前后开源。动机非常具体:Chrome 项目有数万个源文件,用 Make 做一次「无事可做」的增量检查也要花费许多秒,严重拖慢开发节奏。Ninja 通过精简语法、预先展开所有决策、高效的依赖检查,把这一开销压缩到亚秒级。如今 Chrome、Android(部分链路)、LLVM 等大型 C/C++ 项目普遍使用 CMake 或 GN、Meson 生成 Ninja 文件来执行构建。
Ninja 是大型 C/C++ 工程的标配执行器:CMake 用户以 -G Ninja 生成构建文件后,通常能获得比 Makefile 更快的构建与增量检查速度;Chromium、LLVM、Meson 系项目更是默认使用 Ninja。它也被用于任何可以把任务表达为文件依赖图的自动化流程。
问:Ninja 能直接替代 Make 手写规则吗?答:不建议。Ninja 语法刻意不提供变量运算、条件等能力,适合机器生成;手写场景仍应使用 Make 或更高层工具。
问:Ninja 为什么比 Make 快?答:一是解析成本低,构建文件无需复杂求值;二是依赖检查和日志机制高效,空构建和增量构建的固定开销远小于 Make。

| 类型 | 构建系统 |
| 作者 | Evan Martin |
| 首次发布 | 2011 年前后 |
| 典型上游 | CMake / GN / Meson |
| 许可证 | Apache 2.0 |
登录 后参与讨论
暂无讨论,来发表第一条评论吧