gn help execution
ビルドグラフと実行の外観
全体的なビルドの流れ
- カレントディレクトリから.gnファイルを探す("gn help dotfile"を参照)、見つからなければ1つずつディレクトリを上へ移動していって探す。ファイルが見つかったディレクトリがソースルートになる。
- .gnを実行して、グローバル設定とデフォルトのツールチェインを設定する。このファイルでの設定はビルド中に参照できる。
- //BUILD.ngをロードする(ソースルートディレクトリで)。
- 再帰的にルールを評価し、依存を解決するための他のディレクトリBUILD.gnをロードする。BUILDファイルが見つからないとGNはsecondary_source を探す。(dotfileで定義される。("gn help dotfile"参照)
- ターゲットの依存が解決されるとき、.ninjaファイルがディスクに書き込まれる。
- すべてのターゲットが解決されたとき、ルートのbuild.ninjaファイルが書き込まれる。
ターゲット定義とテンプレートの実行
ビルドファイルはパラレルにロードされる。これによりラベル("gn help labels"を参照)から得られる情報以外はGNコードから取得できない。例外はget_target_outputs()であり、これは調査されるターゲットが同じファイル内で事前に定義されていることを必要とする。
ターゲットはタイプと名前で宣言される
static_library("my_static_library") { ... targe parameter definitions ... }
これとは別の一般的target関数もあり、プログラム的にタイプを定義できる("gn help target"を参照)。テンプレートを使って新しいタイプを定義できる("gn help template"参照)。テンプレートはカスタムコードを定義し、他のターゲットへ拡張する。
ターゲットの{ }を実行する前に、ターゲットデフォルトが適用される("gn help set_defaults"参照)。このデフォルト値は典型的にはグローバルなコンパイルフラグやリンクフラグである。
どのターゲットがビルドされるか
デフォルトツールチェインで遭遇したすべてのターゲットに対してビルドルールが作成される。全く参照されないターゲットでも同様である。これらの依存は解決され暗黙のallルールに追加される("gn help ninja_rules"参照)。
デフォルトでないツールチェインのターゲットはそれらがデフォルトのビルドのターゲットで必要なときのみビルドされる。
"gn help ninja-rules"も参照。
依存関係
"public_deps"と"deps"の違いはconfigをビルドツリーにプッシュするかどうかと、"gn check"のためにincludesを許可するかどうかである。
ターゲットの"data_deps"はターゲットがビルドされるときは常にビルドされるが、順番は定義されない。これは実行時に必要とされることを意味する。現在データ依存はターゲットがリンクされる前にリンクされるが、これは意味的に保証されず、パフォーマンスからも好ましくない。そのうちに変えたいと思っているのでこの動作を頼りにしないこと。
終了:2018/07/08 (日) 17:19:29