makeのようなmakeよりも軽いビルド支援ツール。高速で動き、他のビルドツールと連携を前提としたツール。Chromiumプロジェクトから生まれた。1つのファイルに変更を加えたときのビルドが遅すぎるので速くするしたかった。
ディレクトリのbuild.ninjaファイルを読み込みビルドする。
help
usage: ninja [options] [targets...] if targets are unspecified, builds the 'default' target (see manual). options: --version print ninja version ("1.7.2") -C DIR change to DIR before doing anything else -f FILE specify input build file [default=build.ninja] -j N run N jobs in parallel [default=6, derived from CPUs available] -k N keep going until N jobs fail [default=1] -l N do not start new jobs if the load average is greater than N -n dry run (don't run commands but act like they succeeded) -v show all command lines while building -d MODE enable debugging (use -d list to list modes) -t TOOL run a subtool (use -t list to list subtools) terminates toplevel options; further flags are passed to the tool -w FLAG adjust warnings (use -w list to list warnings)
Makeとの比較
どちらもタイムスタンプをみてビルドを決めが、makeにはもっといろいろな機能があり、メイクファイルは人間が書くことを想定している。ninjaは上位ツール(ChromiumではGN)が複雑なbuild.ninjaファイルを書き、それを単純に実行する。
ninja実行時の挙動
- カレントディレクトリからbuild.ninjaを読み込む。build.ninjaはルールのリストを提供する。ルールは長いコマンドを短くした名前のこと。長いコマンドとはコンパイルコマンドのようなもの。
buildステートメントはプロジェクトの依存グラフを記述している。一方ruleステートメントは与えられたグラフのエッジのファイルを生成する方法を記述している。
サンプル.ninjaファイル
cflags = -Wall rule cc command = gcc $cflags -c $in -o $out build foo.o: cc foo.c
cflagsはグローバルの変数、$で参照する。変更は不可。 ccというルールを定義している。commandに値を設定して実行すべきコマンドを指定する。$inは入力ファイルに変換される(foo.c)。$outは出力ファイルに変換される(foo.o)。 buildステートメントは入力と出力の関係を記述している。
phonyルール
特別なルールであるphonyは他のターゲットのエイリアスとして使われる。
build foo: phony some/file/in/a/faraway/subdir/foo
長いパスがfooで表せる。
Page last modified on November 24, 2020, at 03:55 PM
Powered by
PmWiki