ninja¶
- https://ninja-build.org/manual.html Ninja 是一个作用和 make 相同的源代码构建系统。
1 Design goals¶
以下是 Ninja 的设计目标: - 非常快速(即即时)的增量构建,即使对于非常大的项目也是如此。 - 关于如何构建代码的政策很少。不同的项目和更高级别的构建系统对如何构建代码有不同的看法;例如,构建的对象应该与源共存,还是所有的构建输出都应该放在一个单独的目录中?是否有构建项目可分发包的“包”规则?回避这些决定,尝试允许实现,而不是选择,即使这会导致更多的冗长。 - 获得正确的依赖关系,特别是在使用 Makefile 很难获得正确的情况下(例如,输出需要对用于生成它们的命令行的隐式依赖关系;要构建 C 源代码,需要使用 gcc 的“-M”标志作为头依赖关系)。 - 当方便和速度冲突时,更喜欢速度。 重申一下,Ninja 比其他构建系统更快,因为它非常简单。您必须告诉 Ninja 在创建项目的“.Ninja”文件时要做什么。
2 Comparison to Make¶
Ninja 在本质上和功能上最接近 Make,依赖于文件时间戳之间的简单依赖关系。 Ninja 很简单,抛弃了 make 上的大部分功能,如:后缀规则、函数、内置规则 以下是忍者为 Make 添加的一些功能。(这些特性通常可以使用更复杂的 Makefile 来实现,但它们不是 make 本身的一部分。)
- Ninja 特别支持在构建时发现额外的依赖项,使其易于获取 标头依赖项对于 C/C++代码是正确的。
- 构建边缘可以有多个输出。
- 输出隐式地依赖于用于生成它们的命令行,这意味着更改例如编译标志将导致输出重新生成。
- 输出目录总是在运行依赖它们的命令之前隐式创建的。
- 规则可以提供正在运行的命令的简短描述,因此您可以在构建时打印例如“CCfoo.o”而不是长命令行。
- 构建总是并行运行,默认情况下基于系统的 CPU 数量。未指定的生成依赖项将导致不正确的生成。
- 命令输出始终缓冲。这意味着并行运行的命令不会交错它们的输出,当命令失败时,我们可以将其失败输出打印到产生失败的完整命令行旁边。
3 安装¶
- 方法一:
dnf install ninja-build
- 方法二:
pip install ninja
4 使用¶
执行 ninja
,默认在当前目录下查找 build.ninja
文件,然后构建所有过时的目标。
5 ninja 命令行参数¶
- 语法:
ninja [options] [targets...]
|选项|功能| |---|---| |--version
|打印 ninja 版本信息 | |-v, --verbose
|在构建时显示所有命令行信息| |--quiet
|不显示执行状态,只显示命令结果| |-C DIR
|指定执行 build.ninja 文件的路径| |-f FILE
|指定构建文件[default=build.ninja]
| |-j N
| 并行运行 N 个 jobs (0 意味无穷大)[default=3 on this system]
| |-k N
|保持执行直到 N 个 jobs 都失败 (0 表示无穷大)[default=1]
| |-l N
| 如果负载平均值大于 N,则不启动 job| |-n
| 干运行(不要运行命令,但要像成功运行一样)| |-d MODE
| 启用调试(使用“-d list”列出模式)| |-t TOOL
| 运行子工具(使用“-t list”列出子工具)终止顶层| options; further flags are passed to the tool |-w FLAG
| 调整警告(使用“-w list”列出警告)|