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 .
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.
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.