Nachdem Sie cargo build des gleichen Codes herausgefunden haben : falsche Kompilierzeit Fehler? , ich möchte wissen, wie man ein solches Problem verhindert:
%Vor%Ich entferne / addiere die Abhängigkeit ohne irgendeine Modifizierung des Codes und dies beeinflusst das Build-Ergebnis.
Die Quelle des Problems, wie ich beschrieben habe , ist das cexpr hängt von nom so ab:
%Vor%während nmea die Abhängigkeit wie folgt beschreibt:
%Vor%Mit nur nmea als Abhängigkeit baut Cargo nom mit einer Menge von Features, während Cargo cexpr und nmea gegen nom mit einer anderen Reihe von Features baut.
Ich möchte einen Weg finden, um eine solche falsche Verwendung der nmea-Kiste, die ich pflege, zu verhindern.
Ich möchte einen Kompilierzeitfehler wie "'nom' compiled with wrong features"
, oder erzwinge Cargo, zwei Varianten von nom zu erstellen.
Ich habe so etwas in nmea/Cargo.toml
versucht:
Das hat nichts verändert; Es gibt immer noch einen Kompilierzeitfehler, wenn cexpr und nmea kombiniert werden.
Es ist bekannt, Problem, verwandte Links:
die kurze Zusammenfassung:
Die Eigenschaften der Kiste sollen additiv sein
Mit anderen Worten, jedes Feature in der Kiste sollte nur Funktionalität hinzufügen,
API nicht ändern. Leider gibt es keine gute Dokumentation, die dieses Problem beschreibt,
und keine Automatisierung zum Testen dieser Invariante zumindest in diesem Moment.
Dieses spezielle Problem bezieht sich auf nom
bug ( github-Problem ),
Zitat von dort:
Das Problem hierbei ist, dass der Typ
nom::simple_errors::Err<E>
bei Verwendung von "simple errors" einfach ein Typalias vonnom::ErrorKind<E>
ist, während bei "verbose errors" der Typnom::verbose_errors::Err<E>
eine dedizierte enum ist, also der " Mit-Feature "und" ohne Feature "-Schnittstellen sind inkompatibel.
Tags und Links rust rust-cargo rust-crates