Cargo: `--no-default-features` wird nicht auf Abhängigkeiten angewendet

Erstellt am 11. Aug. 2015  ·  3Kommentare  ·  Quelle: rust-lang/cargo

Stellen Sie sich vor, ich arbeite an MyCrate , das von der Kiste A abhängt, die eine Standardfunktion X hat.
Wenn ich MyCrate mit --no-default-features kompiliere, wird Crate A immer noch mit aktiviertem Feature X erstellt.

Das ist ärgerlich, aber es ist möglich, dies zu umgehen, indem Sie eine Cargo.toml wie folgt verwenden:

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

Diese Lösung funktioniert jedoch nicht, wenn A von einer anderen Crate B $ abhängt, die ihre eigenen Standardfunktionen hat. In diesem Fall scheint es nicht möglich zu sein, die Standardfunktionen B zu deaktivieren. Mit anderen Worten, es scheint unmöglich, die Standardfunktionen einer indirekten Abhängigkeit zu deaktivieren.

Mein besonderer Motivationsfall ist, dass libc unnötigerweise von libstd abhängt, wenn es durch cargo verwendet wird .

Hilfreichster Kommentar

@alexcrichton :
Soll also jede Kiste [dependencies.*] default-features = false enthalten, nur damit ein Endbenutzer sich gegen eine verschachtelte Funktion entscheiden kann? Das wirkt ziemlich stumpf.

Alle 3 Kommentare

Aus diesem Grund können Sie mit Cargo Funktionen aus Abhängigkeiten in der Hauptkiste selbst erneut exportieren. Abhängigkeiten sollen ein privates Implementierungsdetail statt einer öffentlichen Schnittstelle sein, und wenn Sie möchten, dass das Feature exportiert wird, müssen Sie sich ausdrücklich dafür entscheiden.

@alexcrichton :
Soll also jede Kiste [dependencies.*] default-features = false enthalten, nur damit ein Endbenutzer sich gegen eine verschachtelte Funktion entscheiden kann? Das wirkt ziemlich stumpf.

Ja, das ist die Absicht. Etwas zu einer default -Funktion zu machen bedeutet, dass es fast die ganze Zeit eingeschaltet ist, also ist es nicht unbedingt für alle optionalen Funktionen gedacht.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen