Build
应对 Rust 项目使用四个 GN 目标模板:
rustc_library
定义了一个库,并视需要定义一个单元测试目标。其他目标可以依赖于该库。rustc_binary
定义了可执行文件和(可选)单元测试目标。rustc_test
定义了仅用于测试的目标。rustc_macro
定义了一个过程宏目标。
examples/rust 目录包含使用这些目标的 Rust 软件包的一些示例,Rust FIDL 示例也是如此。
Cargo.toml
Fuchsia Rust 目标不是使用 cargo 构建的。也就是说,您可以生成 Cargo.toml 文件以用于外部工具。不能保证此功能一定能正常运行。
自动生成的文档
有了目标的 Cargo.toml,您可以通过运行以下命令生成和浏览目标及其依赖项的 HTML 文档:
fx rustdoc path/from/fuchsia/root/to/target:label --open
测试
您可以使用 fx
通过 fx test
{package name}
命令在已连接的设备上运行单元测试。如需了解如何添加和运行测试,请参阅测试 Rust 代码。
过程宏
程序化宏目标在编译时会在主机上执行。因此,它们不能依赖于仅在设备上提供的其他 crate,例如锆石。
目前不支持否定测试,例如断言宏无法编译并出现特定错误的情况。
警告和错误
默认情况下,我们的构建配置会将所有 Rust 警告变成错误。在开发期间,此要求可能非常繁重,并且在您的本地计算机上,您可能希望以警告形式看到警告,并让 CQ 强制执行硬边界。
借助 deny_warnings
GN 参数,您可以在开发环境中控制此行为。在 fx args
中设置 deny_warnings = false
或将 --args=deny_warnings=false
添加到 fx set
后,您可以在本地进行开发,而不受警告的阻止。您可以在检出时将该参数添加到 local/args.gn
,这样它就会应用于所有 build,而不必每次都在终端中输入它。
风格
我们目前没有 Rust 的样式指南,但您应在提交之前运行 fx rustfmt
或 fx format-code
。我们主要使用 rustfmt 默认设置,但有一些自定义设置。
Rust 惯用用法回顾
如果您刚开始接触 Rust,或者希望他人检查您的更改以验证您对 Rust 的使用是否符合习惯,请在 Gerrit 中将“Fuchsia Rust Reviewers”添加为审核者,然后分配给您的 CL。
如有任何问题,请发送电子邮件至 tq-rust-reviewers@google.com。
通信渠道
公开讨论通过 rust-users@fuchsia.dev 邮寄名单进行。