使用 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 工具链后缀(但圆括号需要 shell 引用) 如:

# 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--default 的别名,因为 Fuchsia 二进制文件是这样构建的 (目前)。

  • --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 目标列表 build,如:

$ 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 生成的输出。