いままで「SCons とか gyp とか、なんで C++ のシステムに python 入れなあかんねん」とか「せっかく python 入れたのに windows でビルドするには cygwin 版が必要とかいい加減にしろ」とか色んな事があったのですが、ninja を使う事で悩みが解消するかもしれません。
如何にも外国人ウケしそうなプロジェクト名です。
ninja は chromium ブラウザの開発者が現行のビルドシステムに嫌気をさして作り始めたビルドシステムです。これまでちょっとしたファイルの変更であってもビルド開始までに10秒掛かっていたのが1秒以下になるとの事です。ninja のウリは高速であり、ゴールも高速。configure の様な依存から解決するのではなく、現行のファイル構成からソースレベルの依存情報を解決します。
主に以下の様な目標をかかげています。
ninja は build.ninja というファイルを読み込みます。記述方法は Makefile に似ています。
build.ninja には rule という形でコマンドを定義し、あとは依存関係のみを記述します。例えば Windows で foo.c から foo.o を作り、foo.exe を生成する build.ninja を書くとすれば以下の様になります。
使われ方は通常の Makefile の様に使うのも良いですが、メタビルドシステムと連携して使うと便利で、例えば gyp のジェネレータとして使う方法もある様です。
Ninja, a small build system with a focus on speedNinja 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 = -Walldepfile にも対応しており、
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
gcc -M
と連携して簡単に依存関係が記述出来ます。
rule cc色んな所で速度比較が行われている様ですが、ninja の特徴はコマンドを実行してからビルドが開始するまでのオーバーヘッドの短縮にある様です。いずれ chromium のビルドに使われ始めるかもしれませんね。
depfile = $out.d
command = gcc -MMD -MF $out.d [other gcc flags here]
使われ方は通常の Makefile の様に使うのも良いですが、メタビルドシステムと連携して使うと便利で、例えば gyp のジェネレータとして使う方法もある様です。
NinjaBuild - chromium - Using the Ninja build system - An open-source project to help move the web forward. - Google Project HostingHelp 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