Cargo: 允许为每个功能指定依赖项

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

大多数特征依赖对应关系目前可以通过使依赖可选但特性依赖于此来建模。

如果“feature-a”和“feature-b”依赖于同一个 crate 但版本不同,这是不可能的(据我所知),因为每个 crate 只能指定一次。

对于这种情况,类似以下的语法似乎是一致的(并且通常还可以提供另一种指定依赖于特性的依赖项的方式)。

[target.'cfg(feature = "feature-a")'.dependencies]
foobar = "0.1"

[target.'cfg(feature = "feature-b")'.dependencies]
foobar = "0.2"
A-features A-optional-dependencies

最有用的评论

遇到了一个类似的问题,工作空间被分成多个子包,每个子包都依赖于指定主包依赖项的共享特性。 这样的事情似乎根本不起作用:

[features]
default = [ "fwupd", "system76" ]
fwupd = []
system76 = []

[target.'cfg(all(not(feature = "fwupd"), feature = "system76"))'.dependencies]
firmware-manager = { path = "../", default-features = false, features = [ "system76" ] }

[target.'cfg(all(feature = "fwupd", not(feature = "system76")))'.dependencies]
firmware-manager = { path = "../", default-features = false, features = [ "fwupd" ] }

[target.'cfg(all(feature = "fwupd", feature = "system76"))'.dependencies]
firmware-manager = { path = "../", default-features = false, features = [ "fwupd", "system76" ] }
cargo build --manifest-path gtk/Cargo.toml --no-default-features --features system76

所有3条评论

我认为这也可能在很大程度上得到https://github.com/rust-lang/cargo/issues/5653 的支持? 也可以使其更容易指定!

@alexcrichton可能存在仅与特定功能相关的依赖项。 有没有办法表达?

编辑:
文档中已经有一个示例:
https://doc.rust-lang.org/cargo/reference/manifest.html#the -features-section

遇到了一个类似的问题,工作空间被分成多个子包,每个子包都依赖于指定主包依赖项的共享特性。 这样的事情似乎根本不起作用:

[features]
default = [ "fwupd", "system76" ]
fwupd = []
system76 = []

[target.'cfg(all(not(feature = "fwupd"), feature = "system76"))'.dependencies]
firmware-manager = { path = "../", default-features = false, features = [ "system76" ] }

[target.'cfg(all(feature = "fwupd", not(feature = "system76")))'.dependencies]
firmware-manager = { path = "../", default-features = false, features = [ "fwupd" ] }

[target.'cfg(all(feature = "fwupd", feature = "system76"))'.dependencies]
firmware-manager = { path = "../", default-features = false, features = [ "fwupd", "system76" ] }
cargo build --manifest-path gtk/Cargo.toml --no-default-features --features system76
此页面是否有帮助?
0 / 5 - 0 等级