Ninja, a small build system with a focus on speed
Ninja is a small build system with a focus on speed. It differs from other build systems in two majo...
http://martine.github.io/ninja/
如何にも外国人ウケしそうなプロジェクト名です。
ninja は chromium ブラウザの開発者が現行のビルドシステムに嫌気をさして作り始めたビルドシステムです。これまでちょっとしたファイルの変更であってもビルド開始までに10秒掛かっていたのが1秒以下になるとの事です。ninja のウリは高速であり、ゴールも高速。configure の様な依存から解決するのではなく、現行のファイル構成からソースレベルの依存情報を解決します。
主に以下の様な目標をかかげています。
- 高速なインクリメンタルビルド
- コードのビルド方法を記述する為のポリシーをなるべく小さく
- 正しく依存を解決
python bootstrap.py --platform=mingw
とすればok。ninja は build.ninja というファイルを読み込みます。記述方法は Makefile に似ています。
build.ninja には rule という形でコマンドを定義し、あとは依存関係のみを記述します。例えば Windows で foo.c から foo.o を作り、foo.exe を生成する build.ninja を書くとすれば以下の様になります。
cflags = -Wall
rule ld
command = gcc $ldlags $in -o $out
rule cc
command = gcc $cflags -c $in -o $out
build foo.o: cc foo.c
build foo.exe: ld foo.o
depfile にも対応しており、gcc -M
と連携して簡単に依存関係が記述出来ます。
rule cc
depfile = $out.d
command = gcc -MMD -MF $out.d [other gcc flags here]
色んな所で速度比較が行われている様ですが、ninja の特徴はコマンドを実行してからビルドが開始するまでのオーバーヘッドの短縮にある様です。いずれ chromium のビルドに使われ始めるかもしれませんね。使われ方は通常の Makefile の様に使うのも良いですが、メタビルドシステムと連携して使うと便利で、例えば gyp のジェネレータとして使う方法もある様です。
NinjaBuild - chromium - Using the Ninja build system - An open-source project to help move the web forward. - Google Project Hosting
Help me to solve this error [44/11153] CC obj\third_party\lzma_sdk\lzma_sdk.7zAlloc.obj FAILED: ninj...
https://code.google.com/p/chromium/wiki/NinjaBuild