最近,docs.rs 添加了一项功能,允许 crate 选择不构建所有目标。如果你不需要在所有目标上构建,你可以启用此功能来减少构建时间。
这项功能有什么作用?
默认情况下,docs.rs 为发布到 crates.io 的 每个一级目标 构建所有 crate。然而,大多数 crate 在所有目标上都有相同的内容。对于平台相关的 crate,几乎所有都只针对一个平台,并且不需要在其他目标上构建。例如,winapi
仅在 x86_64-pc-windows-msvc
和 i686-pc-windows-msvc
目标上具有文档,在所有其他目标上都是空白的。
此功能允许你请求仅在特定目标上构建。例如,winapi
可以通过在其 Cargo.toml
中加入以下内容来选择仅构建 Windows 目标。
[]
# This also sets the default target to `x86_64-pc-windows-msvc`
= ["x86_64-pc-windows-msvc", "i686-pc-windows-msvc"]
如果你只需要一个目标,那就更简单了
[]
# This sets the default target to `x86_64-unknown-linux-gnu`
# and only builds that target
= ["x86_64-unknown-linux-gnu"]
查看 docs.rs 文档 了解如何选择加入的更多详情。
这对我的 crate 有什么帮助?
无需为每个一级目标构建,你只需为一个目标构建,将你的文档构建时间减少为原来的六分之一。这对大型 crate 或包含许多需要数小时才能生成文档的 crate 的项目尤其有帮助。
这对 docs.rs 有什么帮助?
构建来自 crates.io 的所有 crate 可能需要很长时间!构建更少的目标将使我们能够减少每个 crate 的等待时间。此外,这将减缓我们存储成本的增长,提高项目的可持续性。
未来可能的变更
我们正在考虑将来默认开启此功能;即,除非明确请求多个目标,否则仅为一个目标构建。然而,我们不想破坏任何人的文档,因此我们在决定迁移策略的同时,将此功能设为选择加入(opt-in)。
这一变更也将使 docs.rs 更容易为非一级目标(例如嵌入式目标)构建文档。
我如何了解更多信息?
你可以在 提出此变更的 issue 和 包含实现的 PR 中了解更多信息。关于构建非一级目标的详情也可在 请求此功能的 issue 中查看。
关于目标以及一级目标的更多信息可在 平台支持 页面中找到。