跳转至

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”列出警告)|