GN ビルドシステム リファレンス マニュアル

GN リファレンス

このドキュメントは「gn help --markdown all」の出力を自動生成したものです。

目次

  • コマンド
    • analyze: ファイルリストに関連するターゲットを分析
    • args: ビルドで宣言された引数を表示または設定
    • check: ヘッダー依存関係を検証
    • clean: 出力ディレクトリをクリア
    • clean_stale: 出力が不要になったファイルを削除
    • desc: ターゲットや設定详细信息を表示
    • format: .gnファイルを整形
    • gen: Ninjaファイルを生成
    • help: ヘルプを表示
    • ls: ターゲットを一覧表示
    • meta: ターゲットメタデータ収集結果を表示
    • outputs: ソース/ターゲットが生成するファイルを表示
    • path: 2つのターゲット間のパスを検索
    • refs: ターゲットやファイルを参照するものを検索
  • ターゲット宣言
    • action: スクリプトを1回実行するターゲットを宣言
    • action_foreach: ファイルセットに対してスクリプトを実行するターゲットを宣言
    • bundle_data: [iOS/macOS] 出力のないターゲットを宣言
    • copy: ファイルをコピーするターゲットを宣言
    • create_bundle: [iOS/macOS] iOSまたはmacOSバンドルをビルド
    • executable: 実行可能ターゲットを宣言
    • generated_file: generated_fileターゲットを宣言
    • group: 名前付きターゲットグループを宣言
    • loadable_module: ロード可能モジュールターゲットを宣言
    • rust_library: Rustライブラリターゲットを宣言
    • rust_proc_macro: Rust手続き型マクロターゲットを宣言
    • shared_library: 共有ライブラリターゲットを宣言
    • source_set: ソースセットターゲットを宣言
    • static_library: 静的ライブラリターゲットを宣言
    • target: 指定されたプログラム型でターゲットを宣言
  • ビルドファイル関数
    • assert: 式の真偽をGeneration時に検証
    • config: 設定オブジェクトを定義
    • declare_args: ビルド引数を宣言
    • defined: 識別子が定義されているかを返す
    • exec_script: スクリプトを同期実行して出力を返す
    • filter_exclude: パターンに一致する値を除外
    • filter_include: パターンに一致しない値を除外
    • foreach: リストを反復処理
    • forward_variables_from: 異なるスコープから変数をコピー
    • get_label_info: ターゲットのラベルから属性を取得
    • get_path_info: ファイル名またはディレクトリ名の部分を抽出
    • get_target_outputs: ターゲットからの出力リストを取得
    • getenv: 環境変数を取得
    • import: ファイルを現在のスコープにインポート
    • not_needed: スコープの変数を不要としてマーク
    • pool: プールオブジェクトを定義
    • print: コンソールに出力
    • print_stack_trace: スタックトレースを出力
    • process_file_template: ファイルリストに対してテンプレート展開を実行
    • read_file: ファイルを変数に読み込み
    • rebase_path: ファイルまたはディレクトリを別の位置にリベース
    • set_default_toolchain: デフォルトツールチェーン名を設定
    • set_defaults: ターゲット型のデフォルト値を設定
    • split_list: リストをN個のサブリストに分割
    • string_join: 区切り文字で文字列リストを連結
    • string_replace: 文字列内の部分文字列を置換
    • string_split: 文字列を文字列リストに分割
    • template: テンプレートルールを定義
    • tool: ツールチェーンのツールに引数を指定
    • toolchain: ツールチェーンを定義
    • write_file: ファイルをディスクに書き込む
  • 組み込み定義済み変数
    • current_cpu, current_os, current_toolchain, default_toolchain
    • gn_version, host_cpu, host_os, invoker
    • python_path, root_build_dir, root_gen_dir, root_out_dir
    • target_cpu, target_gen_dir, target_name, target_os, target_out_dir
  • ターゲットで設定する変数
    • aliased_deps, all_dependent_configs, allow_circular_includes_from
    • arflags, args, asmflags, assert_no_deps
    • bridge_header, bundle_*_dir, cflags*, check_includes
    • code_signing_*, complete_static_lib, configs, contents
    • crate_name, crate_root, crate_type, data, data_deps, data_keys
    • defines, depfile, deps, externs, framework_*, friend
    • gen_deps, include_dirs, inputs, ldflags, lib_dirs, libs
    • metadata, mnemonic, module_name, output_*, pool
    • precompiled_*, product_type, public, public_configs, public_deps
    • rebase, response_file_contents, script, sources, swiftflags
    • testonly, transparent, visibility, walk_keys, weak_frameworks
    • write_runtime_deps, xcasset_*, xcode_extra_attributes
  • その他のヘルプトピック
    • all, buildargs, dotfile, execution
    • grammar, input_conversion, file_pattern, label_pattern
    • labels, metadata_collection, ninja_rules
    • nogncheck, output_conversion, runtime_deps
    • source_expansion, switches

コマンド

gn analyze <out_dir> <input_path> <output_path>

ファイルリストに関連する影響を受けるターゲットを分析します。

このコマンドは3つの引数を取ります:

out_dirはビルドディレクトリへのパスです。

input_pathは3つのフィールドを含むJSONオブジェクトへのパスです:
 - "files": チェックするファイル名のリスト
 - "test_targets": 実行したいテストに必要なターゲットのラベルのリスト
 - "additional_compile_targets"(オプション): 再ビルドしたいがテストに必ずしも必要でないターゲットのリスト

output_pathはコマンドの結果を書き込むパスです。結果はJSONオブジェクトを含みます:
 - "compile_targets": 入力ファイルに影響される入力compile_targetsリストから導出されたラベルのリスト
 - "test_targets": 入力test_targetsリストから入力ファイルに影響されるラベルのリスト
 - "invalid_targets": ビルドグラフに存在しない入力の名前リスト
 - "status": "Found dependency"、"No dependency"、"Found dependency (all)"のいずれか
 - "error": エラーが発生した場合にのみ存在

gn args <out_dir>

ビルドで宣言された引数を表示または設定します。

gn args <out_dir> [--list] [--short] [--args] [--overrides-only]

使用例:
  gn args out/Debug
      out/Debug用の引数をエディタで開く

  gn args out/Debug --list --short
      out/Debugのすべての引数をデフォルト値付きで表示

  gn args out/Debug --list=target_cpu
      target_cpu引数についての情報を表示

gn check <out_dir> [<label_pattern>] [--force] [--check-generated]

GNのインクルードヘッダーチェッカーは、Cライクなソースファイルのインクルードがビルド依存関係グラフと一致することを検証します。

オプション:
  --check-generated
      生成ファイルもチェック(デフォルトでは存在しないためスキップ)

  --check-system
      二重引用符だけでなく山括弧(<angle brackets>)のシステムスタイルインクルードもチェック

  --force
      check_includes = falseの指定を無視してすべてのターゲットをチェック

gn clean <out_dir>...

出力ディレクトリの内容をクリアします(args.gnは削除されません)。

gn clean_stale [<out_dir>...]

ビルドディレクトリから不要になった出力ファイルを削除し、ninjaビルドログと依存関係データベースからその記録を削除します。

gn desc <out_dir> <label or pattern> [<what to show>]

指定されたターゲットまたは設定についての情報を表示します。

表示可能な項目:
  all_dependent_configs, arflags, args, cflags, configs, data_keys
  defines, depfile, deps, framework_dirs, frameworks, include_dirs
  inputs, ldflags, lib_dirs, libs, metadata, outputs, public_configs
  public, script, sources, testonly, visibility, walk_keys, weak_frameworks

オプション:
  --blame: 設定の値をどの設定が設定したかを表示
  --format=json: JSON形式で出力
  --tree: 依存関係ツリーを表示

gn format [--dump-tree] (--stdin | <list of build_files...>)

.gnファイルを標準フォーマットに整形します。

オプション:
  --dry-run: 再フォーマットされるファイルのリストを表示するがディスクには書き込まない
  --dump-tree[=(text|json)]: パースツリーをダンプ
  --stdin: stdinから入力を読んでstdoutに書き込む
  --read-tree=json: JSON形式的ASTを読み込んで上書き

gn gen [--check] [<ide options>] <out_dir>

現在のツリーからNinjaファイルを生成し、指定された出力ディレクトリに置きます。

IDEオプション:
  --ide=<ide_name>
      サポートIDE: eclipse, vs, vs2013, vs2015, vs2017, vs2019, vs2022, xcode, qtcreator, json

  --filters=<path_prefixes>
      生成されるプロジェクトのセットを制限するラベルパターンのリスト

Xcodeフラグ:
  --xcode-project=<file_name>
  --xcode-build-system=(legacy|new)
  --xcode-configs=<config_name_list>

Visual Studioフラグ:
  --sln=<file_name>
  --no-deps
  --winsdk=<sdk_version>

コンパイルデータベース:
  --export-rust-project: rust-project.jsonファイルを生成
  --add-export-compile-commands=<label_pattern>

gn help <anything>

ヘルプを表示します。「all」をパラメータとして使用すると一度にすべてのヘルプを取得できます。

gn ls <out_dir> [<label_pattern>]

指定されたパターンを一致させるすべてのターゲットをリスト表示します。

オプション:
  --as=(buildfile|label|output): ターゲットの表示方法
  --default-toolchain: デフォルトツールチェーンのターゲットのみ一致
  --testonly=(true|false): testonlyフラグで制限
  --type=<type>: ターゲットタイプで制限

gn meta <out_dir> <target>* --data=<key>[,<key>*]

指定されたデータキーのすべてのターゲットの収集されたメタ結果を表示します。

オプション:
  --walk=<key>: ウォークを制御するキー
  --rebase=<dest dir>: 見つかったパスを受けるディレクトリ

gn outputs <out_dir> <list of target or file names...>

指定されたターゲットまたはファイル名に対応する出力ファイルをリスト表示します。

gn path <out_dir> <target_one> <target_two>

2つのターゲット間の依存関係パスを検索します。

オプション:
  --all: 見つかったすべてのパスを表示
  --public: パブリックパスのみ考慮
  --with-data: データ依存関係もたどる

gn refs <out_dir> (<label_pattern>|<label>|<file>)*

逆依存関係(どのターゲットが参照しているか)を検索します。

ターゲット宣言

action: スクリプトを1回実行するターゲット

このターゲット型を使用すると、1つ以上の出力ファイルを生成するためにスクリプトを1回実行できます。

変数の分類:
  フラグ: asmflags, cflags*, defines, include_dirs, inputs, ldflags, lib_dirs, libs
  依存設定: all_dependent_configs, public_configs
  依存関係: assert_no_deps, data_deps, deps, public_deps, runtime_deps
  アクション変数: args*, depfile, inputs*, mnemonic, outputs*, pool, response_file_contents, script*, sources*

例:
  action("process_data") {
    script = "process.py"
    sources = [ "data.txt" ]
    outputs = [ "$target_gen_dir/result.txt" ]
    args = [ "--input", rebase_path(sources[0], root_build_dir),
             "--output", rebase_path(outputs[0], root_build_dir) ]
  }

action_foreach: ファイルセットに対してスクリプトを実行

このターゲット型を使用すると、ソースのセットに対してファイルごとにスクリプトを1回実行できます。

例:
  action_foreach("generate_headers") {
    script = "generate.py"
    sources = [ "a.idl", "b.idl", "c.idl" ]
    outputs = [ "$target_gen_dir/{{source_name_part}}.h" ]
    args = [ "{{source}}", "-o", rebase_path("$target_gen_dir/{{source_name_part}}.h", root_build_dir) ]
  }

bundle_data: [iOS/macOS] 出力のないターゲット

このターゲット型を使用すると、ランタイムに必要なデータを宣言できます。create_bundleターゲットにコピーするファイルを通知するために使用されます。

copy: ファイルをコピーするターゲット

ファイルコピーとして使用されるターゲットを宣言します。

例:
  copy("mydll") {
    sources = [ "mydll.dll" ]
    outputs = [ "$target_out_dir/mydll.dll" ]
  }

  copy("myfiles") {
    sources = [ "data1.dat", "data2.dat" ]
    outputs = [ "$target_gen_dir/{{source_file_part}}" ]
  }

create_bundle: [iOS/macOS] iOSまたはmacOSバンドル

iOSまたはmacOSバンドル(既知の構造を持つディレクトリ)を生成します。

executable: 実行可能ターゲット

実行可能ファイルを生成するターゲットを宣言します。

言語とコンパイル:
  このターゲット型を作成するために使用されるツールとコマンドは、
  sources内のソースファイルによって決定されます。

generated_file: generated_fileターゲット

解決時にデータ値をディスクに書き込みます。このターゲット型はwrite_file()関数いくつかの機能をミラーしますが、解析時ではなく解決時に依存関係からメタデータを収集する機能も提供します。

例(メタデータ収集):
  generated_file("metadata_output") {
    outputs = [ "$root_build_dir/metadata.json" ]
    data_keys = [ "my_files" ]
    deps = [ "//base:my_group" ]
  }

group: 名前付きターゲットグループ

このターゲット型を使用すると、依存関係のセットを1つの名前付きターゲットに収集するメタターゲットを作成できます。

例:
  group("all_tests") {
    deps = [
      "//project:unit_tests",
      "//project:integration_tests",
    ]
  }

loadable_module: ロード可能モジュールターゲット

このターゲット型を使用すると、実行時にロードおよびアンロードできるオブジェクトファイルを作成できます。

rust_library: Rustライブラリターゲット

Rustライブラリは、追加のrust-c提供メタデータを含むアーカイブです。これらはrustcコンパイラで生成される.rlib拡張子のファイルです。

rust_proc_macro: Rust手続き型マクロターゲット

Rust手続き型マクロは、関数の実行として構文拡張を作成することを可能にします。

shared_library: 共有ライブラリターゲット

共有ライブラリは、depsに共有ライブラリをリストしたターゲットでリンカーラインに追加されます。

source_set: ソースセットターゲット

現在、C言語ソースセットのみサポートされています。ソースセットはコンパイルされるソースのコレクションですが、ライブラリをリンクするために使用されず、依存するすべてのターゲットのリンカーラインに暗黙的に追加されます。

static_library: 静的ライブラリターゲット

.a / .libファイルを作成します。中間結果のみ必要な場合はsource_setの使用を検討してください。

target: 指定されたプログラム型でターゲットを宣言

target(target_type_string, target_name_string) { ... }

target()関数は、組み込みターゲットまたはテンプレートをランタイムで決定された型で呼び出す方法です。

例:
  if (use_shared_lib) {
    my_type = "shared_library"
  } else {
    my_type = "source_set"
  }
  target(my_type, "mylib") {
    sources = [ "lib.cc" ]
  }

ビルドファイル関数

assert: Generation時に式が真であることを検証

assert(<condition> [, <error string>])

例:
  assert(is_win)
  assert(defined(sources), "Sources must be defined")

config: 設定オブジェクトを定義

設定オブジェクトはターゲットに適用でき、コンパイラフラグ、インクルード、デファイネなどのセットを指定できます。

例:
  config("myconfig") {
    include_dirs = [ "include/common" ]
    defines = [ "ENABLE_FEATURE" ]
  }

  executable("myapp") {
    configs = [ ":myconfig" ]
  }

declare_args: ビルド引数を宣言

現在のスコープに引数を導入します。コマンドラインまたはツールチェーンの引数で指定されていない場合、declare_argsブロックで指定されたデフォルト値が使用されます。

例:
  declare_args() {
    enable_teleporter = true
    enable_feature = false
  }

defined: 識別子が定義されているかを返す

指定された引数が定義されている場合はtrueを返します。これはテンプレートで呼び出し元が適切に設定していることを確認するのに最も役立ちます。

template("mytemplate") {
  assert(defined(invoker.sources), "Sources must be defined")
  # オプション引数の処理
  if (defined(invoker.values)) {
    values = invoker.values
  } else {
    values = "default"
  }
}

exec_script: スクリプトを同期実行

exec_script(filename,
            arguments = [],
            input_conversion = "",
            file_dependencies = [])

例:
  result = exec_script("myscript.py", ["input"], "list lines")

filter_exclude: パターンに一致する値を除外

filter_exclude(values, exclude_patterns)

例:
  values = [ "foo.cc", "foo.h", "foo.proto" ]
  result = filter_exclude(values, [ "*.proto" ])
  # result = [ "foo.cc", "foo.h" ]

filter_include: パターンに一致しない値を除外

filter_include(values, include_patterns)

例:
  values = [ "foo.cc", "foo.h", "foo.proto" ]
  result = filter_include(values, [ "*.proto" ])
  # result = [ "foo.proto" ]

foreach: リストを反復処理

foreach(<loop_var>, <list>) {
  <loop contents>
}

例:
  mylist = [ "a", "b", "c" ]
  foreach(i, mylist) {
    print(i)
  }

forward_variables_from: 異なるスコープから変数をコピー

forward_variables_from(from_scope, variable_list_or_star,
                       variable_to_not_forward_list = [])

例:
  template("my_test") {
    action(target_name) {
      forward_variables_from(invoker, ["data_deps", "deps", "public_deps", "visibility"])
      deps += [ "//tools:test_runner" ]
    }
  }

get_label_info: ターゲットのラベルから属性を取得

get_label_info(target_label, what)

可能な値:
  "name", "dir", "target_gen_dir", "root_gen_dir"
  "target_out_dir", "root_out_dir"
  "label_no_toolchain", "label_with_toolchain", "toolchain"

例:
  get_label_info("//foo/bar:baz", "target_gen_dir")
  # "//out/Debug/gen/foo/bar" を返す

get_path_info: ファイル名またはディレクトリ名の部分を抽出

get_path_info(input, what)

可能な値:
  "file", "name", "extension", "dir"
  "out_dir", "gen_dir", "abspath"

get_target_outputs: ターゲットからの出力リストを取得

指定されたターゲットの出力ファイルのリストを返します。

getenv: 環境変数を取得

value = getenv(env_var_name)

例:
  home_dir = getenv("HOME")

import: ファイルを現在のスコープにインポート

importコマンドは、指定されたファイルを実行した結果のルールと変数を現在のスコープにロードします。

例:
  import("//build/rules/compile_rules.gni")

not_needed: 変数を不要としてマーク

not_needed(variable_list_or_star, variable_to_ignore_list = [])

例:
  not_needed("*", ["config"])
  not_needed(["data_deps", "deps"])

pool: プールオブジェクトを定義

プールオブジェクトは、ツールに適用してビルドの並列処理を制限できます。

例:
  pool("link_pool") {
    depth = 1
  }

  toolchain("my_toolchain") {
    tool("link") {
      command = "..."
      pool = ":link_pool"
    }
  }

print: コンソールに出力

すべての引数をコンソールにスペースで区切って出力します。末尾に改行が自動的に追加されます。

例:
  print("Hello world")
  print(sources, deps)

現在のファイル位置と、この位置に至るすべてのテンプレート呼び出しをコンソールに出力します。

process_file_template: ファイルリストに対してテンプレート展開を実行

process_file_templateは、テンプレートリストをソースファイルリストに適用し、各テンプレートを各ソースに適用した結果を返します。

例:
  sources = ["foo.idl", "bar.idl"]
  outputs = process_file_template(sources,
      ["$target_gen_dir/{{source_name_part}}.cc",
       "$target_gen_dir/{{source_name_part}}.h"])

read_file: ファイルを変数に読み込み

read_file(filename, input_conversion)

例:
  lines = read_file("foo.txt", "list lines")

rebase_path: ファイルまたはディレクトリを別の位置にリベース

文字列引数または文字列リストを取り、それらを異なるベースディレクトリ相対に変換します。

例:
  # ビルドディレクトリ相対に変換
  foo = rebase_path("myfile.txt", root_build_dir)

  # システム絶対パスに変換
  foo = rebase_path("myfile.txt")

  # スクリプト用
  action("myscript") {
    args = [
      "--data",
      rebase_path("//mything/data/input.dat", root_build_dir),
    ]
  }

set_default_toolchain: デフォルトツールチェーン名を設定

指定されたラベルはツールチェーン定義を識別する必要があります。

例:
  if (target_cpu == "x64") {
    set_default_toolchain("//toolchains:64")
  } else if (target_cpu == "x86") {
    set_default_toolchain("//toolchains:32")
  }

set_defaults: ターゲット型のデフォルト値を設定

set_defaults("static_library") {
  configs = [ "//tools:settings" ]
}

split_list: リストをN個のサブリストに分割

result = split_list(input, n)

例:
  mylist = [1, 2, 3, 4, 5, 6]
  split_list(mylist, 3)
  # [[1, 2], [3, 4], [5, 6]] を返す

string_join: 区切り文字で文字列リストを連結

result = string_join(separator, strings)

例:
  string_join(", ", ["a", "b", "c"])  # "a, b, c"

string_replace: 文字列内の部分文字列を置換

result = string_replace(str, old, new[, max])

例:
  string_replace("Hello world", "world", "GN")  # "Hello GN!"

string_split: 文字列を文字列リストに分割

result = string_split(str[, sep])

例:
  string_split("a b c")  # ["a", "b", "c"]
  string_split("a,b,c", ",")  # ["a", "b", "c"]

template: テンプレートルールを定義

テンプレートは、組み込みターゲット型に追加するカスタム名を定義します。

template("my_idl") {
  assert(defined(invoker.sources), "Need sources")

  action_foreach(target_name + "_gen") {
    sources = invoker.sources
    script = "//tools/idl/idl_generator.py"
    outputs = [ "$target_gen_dir/{{source_name_part}}.cc" ]
  }

  source_set(target_name) {
    sources = get_target_outputs(":" + target_name + "_gen")
    deps = [ ":" + target_name + "_gen" ]
  }
}

tool: ツールチェーンのツールに引数を指定

tool(<tool type>) {
  <tool variables...>
}

ツールタイプ:
  コンパイラ: "cc", "cxx", "cxx_module", "objc", "objcxx", "rc", "asm", "swift"
  リンカー: "alink", "solink", "link"
  その他: "stamp", "copy", "action"
  プラットフォーム固有: "copy_bundle_data", "compile_xcassets"
  Rust: "rust_bin", "rust_cdylib", "rust_dylib", "rust_macro", "rust_rlib", "rust_staticlib"

ツール変数:
  command, command_launcher, default_output_dir, default_output_extension
  depfile, depsformat, description, outputs, pool, restat
  rspfile, rspfile_content, runtime_outputs, precompiled_header_type

toolchain: ツールチェーンを定義

ツールチェーンは、ソースコードをコンパイルするために使用されるコマンドとビルドフラグのセットです。

toolchain("my_toolchain") {
  tool("cc") {
    command = "gcc {{source}} -o {{output}}"
    outputs = ["{{source_out_dir}}/{{source_name_part}}.o"]
  }

  toolchain_args = {
    current_cpu = "x64"
  }
}

write_file: ファイルをディスクに書き込む

write_file(filename, data, output_conversion = "")

組み込み定義済み変数

定義済み変数には以下が含まれます:

  • current_cpu: 現在のツールチェーンのプロセッサアーキテクチャ
  • current_os: 現在のツールチェーンのオペレーティングシステム
  • current_toolchain: 現在のツールチェーンのラベル
  • default_toolchain: デフォルトツールチェーンのラベル
  • gn_version: GNのバージョン
  • host_cpu: GNが実行されているプロセッサアーキテクチャ
  • host_os: GNが実行されているオペレーティングシステム
  • invoker: テンプレート内の呼び出し元スコープ
  • python_path: Pythonの絶対パス
  • root_build_dir: ビルドコマンドが実行されるディレクトリ
  • root_gen_dir: ツールチェーンの生成ファイル用ディレクトリ
  • root_out_dir: ツールチェーン出力ファイルのルートディレクトリ
  • target_cpu: ビルドのターゲットCPUアーキテクチャ
  • target_gen_dir: ターゲットの生成ファイル用ディレクトリ
  • target_name: 現在のターゲットの名前
  • target_os: ビルドのターゲットオペレーティングシステム
  • target_out_dir: ターゲット出力ファイル用ディレクトリ

ターゲットで設定する変数

主要な変数の説明:

  • deps: プライベートリンク依存関係
  • public_deps: パブリック依存関係
  • data_deps: 非リンク依存関係
  • configs: このターゲットに適用される設定
  • public_configs: 依存先に適用される設定
  • all_dependent_configs: すべての依存先に強制される設定
  • sources: ターゲットのソースファイル
  • inputs: 追加のコンパイル時依存関係
  • outputs: アクションとコピーターゲット用の出力ファイル
  • include_dirs: 追加のインクルードディレクトリ
  • defines: Cプリプロセッサ定義
  • ldflags: リンカーに渡されるフラグ
  • cflags: Cコンパイラに渡されるフラグ
  • testonly: ターゲットがテストのみに使用されることを宣言
  • visibility: ターゲットに依存できるラベルのリスト

その他のヘルプトピック

Build Arguments Overview

ビルド引数は、ビルドファイルの外部から渡される変数で、ビルドの動作方法を決定するためにクエリできます。

.gnファイル

GNは開始時に現在ディレクトリの親ディレクトリまで「.gn」というファイルを検索します。これがソースルートを示します。

Build graph and execution overview

ビルドフローは、.gnファイルの発見から始まり、ビルド設定ファイルの実行、ルートBUILD.gnの読み込み、依存関係の解決、Ninjaファイルの生成へと進みます。

Language and grammar for GN build files

GNビルドファイルはトークンのシーケンスとして読み取られます。言語は動的型付けで、ブール値、整数、文字列、リスト、スコープの型をサポートします。

Input and output conversion

入力と出力の変換は、データを外部フォーマットに変換する方法を指定します。"list lines"、"scope"、"string"、"value"、"json"などの変換がサポートされています。

File patterns

ファイルパターンは非常に限られた正規表現です。"*"は任意の文字の0回以上のマッチを意味し、"\b"はパス境界にマッチします。

Label patterns

ラベルパターンは、ソースツリーの1つ以上のラベルを表現する方法です。明示的なラベル、ターゲット名のワイルドカード、ディレクトリ名のワイルドカードをサポートしています。

About labels

依存関係グラフに参加できるすべてのもの(ターゲット、設定、ツールチェーン)はラベルで識別されます。一般的なラベルは「//base/test:test_support」のような形式です。

Metadata Collection

メタデータは、依存関係ツリー全体にターゲットに添付される情報であり、 Generationステップ中にファイルに収集できます。

Ninja build rules

すべての生成ターゲットは、暗黙の「all」ビルドルールに追加され、「ninja all」ですべてがコンパイルされます。

nogncheck: チェックからインクルード行をスキップ

「nogncheck」を含むインクルード行はヘッダーチェックから除外されます。

Runtime dependencies

ターゲットのランタイム依存関係は、「runtime_deps」カテゴリを通じて公開され、ビルドGeneration時に書き出すこともできます。

How Source Expansion Works

ソース展開は、action_foreachおよびcopyターゲット型で使用され、ソースファイル名を出力ファイル名または引数にマッピングします。

Available global switches

--args: ビルド引数のオーバーライドを指定
--color: カラー出力を強制
--dotfile: ".gn"ファイルの名前をオーバーライド
--fail-on-unused-args: 未使用のビルド引数を致命的エラーとして扱う
--markdown: ヘルプ出力をMarkdown形式で出力
--ninja-executable: Ninja実行ファイルを設定
--nocolor: 非カラー出力を強制
-q: クワイエットモード
--root: ソースルートを明示的に指定
--root-target: ルートターゲットをオーバーライド
--runtime-deps-list-file: ターゲットのランタイム依存関係をファイルに保存
--script-executable: スクリプト実行に使用する実行ファイルを設定
--threads: ワーカースレッド数を指定
--time: すべての所要時間のサマリーを出力
--tracelog: Chrome互換のトレースログを指定されたファイルに書き込み
-v: 冗長ログ
--version: GNのバージョン番号を出力して終了

タグ: build-system ninja gn chrome google-build-tools

7月8日 16:41 投稿