如何让一个可选依赖项启用另一个可选依赖项生锈

How to have an optional dependency enable another optional dependency rust

我正在用 Rust 创建一个库,我有不同的功能,用户可以通过可选的依赖项启用这些功能。我想要它,所以如果启用了依赖项 diesel,那么也应该启用 diesel-derive-enum

[dependencies]
diesel = {version = "1.4.6", optional = true, features = ["postgres", "chrono"]}
diesel-derive-enum = {version = "1.1.1", optional = true, features = ["postgres"]}

您可以使用 cargo features 启用多个可选依赖项。

这是一个例子:

[dependencies]
cli-color = { version = "0.1.20", optional = true }
clap= { version = "0.2.3", optional = true }

[features]
cli = ["cli-color", "clap"]

也是来自 tokio 的真实示例。 https://github.com/tokio-rs/tokio/blob/master/tokio/Cargo.toml

更多详细信息,请参阅官方 Rust 文档: https://doc.rust-lang.org/cargo/reference/features.html#the-features-section

从 Rust 1.60.0 开始,使用 stabilization of namespaced dependencies,您现在可以使用 dep: 功能来执行此操作,而无需添加不同名称的功能。

[dependencies]
diesel = {version = "1.4.6", optional = true, features = ["postgres", "chrono"]}
diesel-derive-enum = {version = "1.1.1", optional = true, features = ["postgres"]}

[features]
diesel = ["dep:diesel", "dep:diesel-derive-enum"]

现在您只需将 --features diesel 传递给 cargo 即可启用 dieseldiesel-derive-enum 可选依赖项。

有关详细信息,请参阅 Optional Features 的 Cargo Book 部分。