Ninja (构建系统)

Ninja是一个专注于速度的小型构建系统[2],由Evan Martin于2010年在Chrome团队工作时开发。

Ninja
Ninja
原作者Evan Martin
当前版本
  • 1.12.1(2024年5月11日;穩定版本)[1]
編輯維基數據鏈接
源代码库https://github.com/ninja-build/ninja.git
编程语言C++,Python
操作系统Linux,macOS,Windows
许可协议Apache License 2.0
网站https://ninja-build.org/

背景

Evan Martin从2007年到2012年在Chrome团队工作。在加入初期,Chrome只能够在Windows上运行,他的主要任务是把代码移植到其它平台,而面临的第一个任务就是确定构建系统。

Chrome团队的成员提出了GYP增量解决方案,它的作用是从高级的描述规则生成平台相关的构建文件。

在Linux上,他最开始尝试把Scons作为GYP的目标构建系统,但当文件发生变化,启动构建就需要花费30秒时间。因为他的工作是移植代码,涉及到频繁的更改文件和重新编译,所以这被认为是不可接受的。

后来,他又尝试make作为GYP的目标构建系统。在刚开始的时候速度相当快,但当文件越来越多时,它变慢了。后来,他注意到make中的一些问题,觉得可以优化,因此有了开发Ninja的想法。[3]

在使用Ninja后,修改文件后Chrome增量构建的时间降到了6秒钟。

使用“Ninja”命名是因为作者觉得它速度很快。[4]

文件生成器

GYP、CMakeMeson支持生成Ninja构建文件。[5]

除了通用的生成器外,许多项目使用专用的脚本来生成构建文件。[6]

用户

Ninja的用户包括了一些著名的大型项目[5]

參考資料

  1. ^ Release 1.12.1. 2024年5月11日 [2024年5月23日]. 
  2. ^ Ninja, a small build system with a focus on speed. ninja-build.org. [2019-09-30]. (原始内容存档于2019-10-08). 
  3. ^ The Performance of Open Source Software | Ninja. www.aosabook.org. [2019-09-30]. (原始内容存档于2019-10-03). 
  4. ^ Chromium Notes: Ninja, a new build system. neugierig.org. [2019-09-30]. (原始内容存档于2019-09-30). 
  5. ^ 5.0 5.1 The Ninja build tool [LWN.net]. lwn.net. [2019-09-30]. (原始内容存档于2019-11-15). 
  6. ^ List of generators producing ninja build files, ninja-build,Github, 2019-09-30 [2019-09-30], (原始内容存档于2019-06-03) 

外部連結