本文档简要介绍了查看生成的 FIDL 的方法, 绑定代码中。有关如何转换 FIDL 定义的一般信息 目标语言代码,请参阅绑定参考文档。
FIDL 库 fuchsia.io 始终用作运行示例。时间是
//sdk/fidl/fuchsia.io 中定义。
查看生成的代码
本部分介绍如何直接访问生成的代码文件。
GN build
如果您想查看
Fuchsia 构建,您可以先构建相关的目标,然后检查
build 输出中已生成的文件。本节中的说明假设
目标是使用标准 fidl GN 模板定义的;以及
将 build 目录设置为默认路径 (out/default)。fx status
可用于查找当前的 build 目录。
您可以在 fidling 工具链中的 GN build 中找到大多数 FIDL 输出。对于
fuchsia.io,输出的根为
out/default/fidling/gen/sdk/fidl/fuchsia.io。本文档的其余部分介绍了
作为根目录。其结构如下:
out/default/fidling/gen/sdk/fidl/fuchsia.io
├── fuchsia.io.fidl.json
└── fuchsia.io
   ├── fidl_fuchsia_io.rs
   ├── fuchsia.io.fidl
   │  └── impl.go
   ├── c
   │  └── fuchsia
   │     └── io
   │        └── c
   │           ├── fidl.h
   │           ├── fidl.client.c
   │           └── fidl.server.c
   ├── cpp
   │  └── fidl
   │     └── fuchsia.io
   │        └── cpp
   │           ├── common_types.cc
   │           ├── common_types.h
   │           ├── driver
   │           │  ├── fidl.h
   │           │  ├── natural_messaging.cc
   │           │  ├── natural_messaging.h
   │           │  ├── wire.h
   │           │  ├── wire_messaging.cc
   │           │  └── wire_messaging.h
   │           ├── fidl.h
   │           ├── hlcpp_conversion.h
   │           ├── markers.h
   │           ├── natural_messaging.cc
   │           ├── natural_messaging.h
   │           ├── natural_types.cc
   │           ├── natural_types.h
   |           ├── test_base.h
   │           ├── type_conversions.cc
   │           ├── type_conversions.h
   │           ├── wire.h
   │           ├── wire_messaging.cc
   │           ├── wire_messaging.h
   │           ├── wire_test_base.h
   │           ├── wire_types.cc
   │           └── wire_types.h
   └── hlcpp
      └── fuchsia
         └── io
            └── cpp
               ├── fidl.h
               ├── fidl.cc
               └── fidl_test_base.h
许多生成的代码路径似乎包含重复的目录名称,例如
.../fuchsia.io/fuchsia.io/...。这是因为 FIDL 库通常是
文件中定义的一个以库命名的目录,其目标名称以
库。第一个 fuchsia.io 来自目录,第二个
。
JSON IR
JSON IR 在根目录中生成为 ${target_name}.fidl.json。
例如,使用 fuchsia.io 时:
out/default/fidling/gen/sdk/fidl/fuchsia.io/fuchsia.io.fidl.json
Rust
Rust 绑定在根目录下生成,如下所示
${target_name}/${rust_name}.rs,其中 ${rust_name} 派生自
来替换库名称例如,使用 fuchsia.io 时:
out/default/fidling/gen/sdk/fidl/fuchsia.io/fuchsia.io/fidl_fuchsia_io.rs
Go
Go 绑定在根目录下生成,如下所示
${target_name}/${library_name}.fidl/impl.go。例如,使用 fuchsia.io 时:
out/default/fidling/gen/sdk/fidl/fuchsia.io/fuchsia.io/fuchsia.io.fidl/impl.go
C++
新的 C++ 绑定会使用根子目录中的源布局
目录遵循以下格式:${target_name}/${binding_flavor}/fuchsia.io/cpp。
C++ 代码会输出 wire_types.h、wire_types.cc、wire_messaging.h。
wire_messaging.cc、wire.h 和 wire_test_base.h(用于使用线缆类型),以及
natural_types.h、natural_types.cc、natural_messaging.h、
natural_messaging.cc、test_base.h、fidl.h(用于使用自然类型)
以及线缆类型
common_types.h 和 markers.h 在电线和自然类型之间共享。
例如,将 fuchsia.io 与 C++ 绑定搭配使用会创建以下内容
文件:
out/default/fidling/gen/sdk/fidl/fuchsia.io/fuchsia.io/cpp/fidl/fuchsia.io/cpp/markers.h
out/default/fidling/gen/sdk/fidl/fuchsia.io/fuchsia.io/cpp/fidl/fuchsia.io/cpp/common_types.h
out/default/fidling/gen/sdk/fidl/fuchsia.io/fuchsia.io/cpp/fidl/fuchsia.io/cpp/common_types.cc
out/default/fidling/gen/sdk/fidl/fuchsia.io/fuchsia.io/cpp/fidl/fuchsia.io/cpp/wire_types.h
out/default/fidling/gen/sdk/fidl/fuchsia.io/fuchsia.io/cpp/fidl/fuchsia.io/cpp/wire_types.cc
out/default/fidling/gen/sdk/fidl/fuchsia.io/fuchsia.io/cpp/fidl/fuchsia.io/cpp/wire_messaging.h
out/default/fidling/gen/sdk/fidl/fuchsia.io/fuchsia.io/cpp/fidl/fuchsia.io/cpp/wire_messaging.cc
out/default/fidling/gen/sdk/fidl/fuchsia.io/fuchsia.io/cpp/fidl/fuchsia.io/cpp/wire.h
out/default/fidling/gen/sdk/fidl/fuchsia.io/fuchsia.io/cpp/fidl/fuchsia.io/cpp/wire_test_base.h
out/default/fidling/gen/sdk/fidl/fuchsia.io/fuchsia.io/cpp/fidl/fuchsia.io/cpp/natural_types.h
out/default/fidling/gen/sdk/fidl/fuchsia.io/fuchsia.io/cpp/fidl/fuchsia.io/cpp/natural_types.cc
out/default/fidling/gen/sdk/fidl/fuchsia.io/fuchsia.io/cpp/fidl/fuchsia.io/cpp/natural_messaging.h
out/default/fidling/gen/sdk/fidl/fuchsia.io/fuchsia.io/cpp/fidl/fuchsia.io/cpp/natural_messaging.cc
out/default/fidling/gen/sdk/fidl/fuchsia.io/fuchsia.io/cpp/fidl/fuchsia.io/cpp/test_base.h
out/default/fidling/gen/sdk/fidl/fuchsia.io/fuchsia.io/cpp/fidl/fuchsia.io/cpp/type_conversions.h
out/default/fidling/gen/sdk/fidl/fuchsia.io/fuchsia.io/cpp/fidl/fuchsia.io/cpp/type_conversions.cc
out/default/fidling/gen/sdk/fidl/fuchsia.io/fuchsia.io/cpp/fidl/fuchsia.io/cpp/hlcpp_conversion.h
out/default/fidling/gen/sdk/fidl/fuchsia.io/fuchsia.io/cpp/fidl/fuchsia.io/cpp/fidl.h
随着新 C++ 绑定的形成,更多绑定将遵循此模式。 请参阅下文,了解如何生成尚未统一的绑定。
HLCPP 和 C
HLCPP 和 C 绑定在根目录的子目录中生成
并遵循 ${target_name}/${binding_flavor}/fuchsia/io 格式。接下来
- HLCPP 输出 
cpp/fidl.cc、cpp/fidl.h和cpp/fidl_test_base.h。 - C 会输出 
c/fidl.client.c、c/fidl.server.c和fidl.h。 
例如,将 fuchsia.io 与 HLCPP 绑定结合使用会创建
以下文件:
out/default/fidling/gen/sdk/fidl/fuchsia.io/fuchsia.io/hlcpp/fuchsia/io/cpp/fidl.cc
out/default/fidling/gen/sdk/fidl/fuchsia.io/fuchsia.io/hlcpp/fuchsia/io/cpp/fidl.h
out/default/fidling/gen/sdk/fidl/fuchsia.io/fuchsia.io/hlcpp/fuchsia/io/cpp/fidl_test_base.h
查看生成的文档
Rust
介绍 Fuchsia 中使用的所有 Rust crate 的文档,其中包括
FIDL 库在线托管于
fuchsia-docs.firebaseapp.com.
您可以使用 fx rustdoc 生成离线文档。