Cargo: Permitir especificar dependencias por característica

Creado en 31 ago. 2018  ·  3Comentarios  ·  Fuente: rust-lang/cargo

La mayoría de las correspondencias de dependencia de características se pueden modelar actualmente haciendo que la dependencia sea opcional pero haciendo que la característica dependa de esto.

Esto no es posible (por lo que veo) si "feature-a" y "feature-b" dependen de la misma caja pero en diferentes versiones, ya que cada caja solo se puede especificar una vez.

Una sintaxis como la siguiente parecería consistente para ese caso (y también podría proporcionar otra forma de especificar dependencias dependientes de funciones en general).

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

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

Comentario más útil

Encontró un problema similar en el que un espacio de trabajo se divide en varias subcajas y cada una se basa en la especificación de características compartidas de la dependencia de la caja principal. Algo como esto no parece funcionar en absoluto:

[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

Todos 3 comentarios

Creo que esto también puede ser compatible en gran medida con https://github.com/rust-lang/cargo/issues/5653? ¡Puede que también sea un poco más fácil de especificar!

@alexcrichton Puede haber dependencias que sean relevantes solo para una característica determinada. ¿Hay alguna manera de expresar eso?

Editar:
Ya hay un ejemplo en el documento:
https://doc.rust-lang.org/cargo/reference/manifest.html#the -features-section

Encontró un problema similar en el que un espacio de trabajo se divide en varias subcajas y cada una se basa en la especificación de características compartidas de la dependencia de la caja principal. Algo como esto no parece funcionar en absoluto:

[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
¿Fue útil esta página
0 / 5 - 0 calificaciones