使用 GN 標籤進行建構

fx build 現在可以直接建構 GN 目標。方法很簡單,只要使用一或多個 GN 目標標籤,且指令列上有 // 前置字串,如下所示:

# Build the `cstr` and `uuid` libraries for Fuchsia.
fx build //src/lib/cstr //src/lib/uuid

# Equivalent to the previous command.
fx build //src/lib/cstr:cstr //src/lib/uuid:uuid

如果標籤不屬於設定的 GN 圖表的一部分,系統會顯示錯誤訊息。平均 如果已在對應的 BUILD.gn 檔案中定義,則仍必須是 來自 //:default 或其他定義的依附元件清單的遞移依附元件 位於 args.gn (例如 universe_package_labels 等) 中:

# Build the corresponding tests for Fuchsia too.
$ fx build //src/lib/cstr:tests
ERROR: Unknown GN label (not in the configured graph): //src/lib/cstr:tests

如要進一步瞭解發生這種情況的原因,請參閱 gn-root-targets

GN 工具鍊後置字串

支援 GN 工具鍊後置字串 (但括號需要有殼層引用) 如:

# Build the host tests for the `cstr` library.
fx build '//src/lib/cstr:tests(//build/toolchain:host_x64)'

或:

# Same as above
fx build //src/lib/cstr:tests\(//build/toolchain:host_x64\)

GN 工具鍊別名

為了方便起見,您可以使用特定選項來附加 GN 工具鍊後置字串 設定 next 標籤,例如:

# Build the `cstr` and `fidl` tests for the host, and the `trace` library for Fuchsia.
fx build --host //src/lib/cstr:tests //src/lib/fidl:tests --fuchsia //src/lib/trace

別名工具鍊定義支援少數固定選項:

  • --host 與建構機器的主機工具鍊標籤相符 (例如 //build/toolchain:host_x64//build/toolchain:host_arm64)。

  • --default 與目前版本的預設工具鍊相符 設定 (例如 //build/toolchain/fuchsia:riscv64)。

  • 由於 Fuchsia 二進位檔建構完成,--fuchsia--default 的另一個名稱 保持預設的 GN 工具鍊 (目前)。

  • --fidl//build/fidl:fidling 相符,也就是用於處理的 GN 工具鍊 FIDL 檔案。

為了方便起見,我們會陸續新增其他別名。

GN 工具鍊選項

--toolchain=LABEL 選項可用於特定 GN 工具鍊標籤:

# Build the `cstr` tests for Linux/arm64 through cross-compiling
fx build --toolchain=//build/toolchain:linux_arm64 //src/lib/cstr:tests

它也接受工具鍊別名,例如:

# Same as using `--host` directly as well.
fx build --toolchain=host //src/lib/cstr:tests

設為 Ninja 目標路徑的 GN 標籤

fx build 指令一律會輸出所需的 Ninja 目標清單 建構,如下所示:

$ fx build //src/lib/cstr
Building Ninja target(s): obj/src/lib/cstr/cstr.stamp
...

請注意,這份清單包含對應建構指令的所有輸出內容, 包括 GN 隱含產生的值。建構其中任何項目都會觸發 可一次產生所有輸出內容的指令

$ fx build //src/lib/json_parser
Building Ninja target(s): obj/src/lib/json_parser/json_parser.inputdeps.stamp obj/src/lib/json_parser/json_parser.json_parser.cc.o obj/src/lib/json_parser/json_parser.rapidjson_validation.cc.o obj/src/lib/json_parser/json_parser.stamp
...

Ninja 鎖定至 GN 標籤

系統仍支援傳送 Ninja 目標路徑,但會輸出警告 提供最適合的建構引數,例如:

$ fx build host_x64/zbi host_x64/ffx
WARNING: Use '--host //zircon/tools/zbi' instead of Ninja path 'host_x64/zbi'
WARNING: Use '--host //src/developer/ffx/frontends/ffx:ffx_bin' instead of Ninja path 'host_x64/ffx'
Building Ninja target(s): host_x64/exe.unstripped/zbi host_x64/ffx host_x64/obj/src/developer/ffx/frontends/ffx/ffx_bin.stamp host_x64/obj/zircon/tools/zbi/zbi.zbi.cc.o host_x64/zbi host_x64/zbi.build-id.stamp
...

如果不想看到這個標籤,請傳送 -- 選項後方的 Ninja 路徑 分隔符,因為其後方的所有內容都會直接傳遞至 Ninja:

fx build -- host_x64/zbi host_x64/ffx

不過,由於 Bazel 遷移作業執行,因此這種做法 Bazel 日後產生的輸出內容。