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) 

外部連結