Cargo: `--no-default-features` 不适用于依赖项

创建于 2015-08-11  ·  3评论  ·  资料来源: rust-lang/cargo

想象一下,我正在研究MyCrate ,这取决于 crate A ,它具有默认功能X
如果我用--no-default-features编译MyCrate $ ,板条箱A仍然是在启用功能X的情况下构建的。

这很烦人,但可以通过使用 Cargo.toml 来解决,例如:

[dependencies.A]
version = "*"
default-features = false

但是,当A依赖于另一个具有自己的默认功能的箱B时,此解决方案不起作用。 在这种情况下,似乎无法禁用B的默认功能。 换句话说,似乎不可能禁用间接依赖的默认功能。

我的特别激励案例是libc 在通过 cargo 使用时不必要地依赖于 libstd

最有用的评论

@alexcrichton
那么每个 crate 是否应该包含[dependencies.*] default-features = false以便最终用户可以选择退出某些嵌套功能? 这似乎相当迟钝。

所有3条评论

这就是为什么 Cargo 允许您从主 crate 本身的依赖项中重新导出功能。 依赖项旨在成为私有实现细节而不是公共接口,如果您希望导出该功能,那么您必须明确选择这样做。

@alexcrichton
那么每个 crate 是否应该包含[dependencies.*] default-features = false以便最终用户可以选择退出某些嵌套功能? 这似乎相当迟钝。

是的,这就是意图。 将某些东西设为default功能意味着它将几乎一直打开,因此它不一定适用于所有可选功能。

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

dotnetspec picture dotnetspec  ·  3评论

ehuss picture ehuss  ·  3评论

alilleybrinker picture alilleybrinker  ·  3评论

japaric picture japaric  ·  3评论

aturon picture aturon  ·  3评论