Wie kann ich verhindern, dass Cargo dieselbe Abhängigkeit mit verschiedenen Funktionen zusammenführt?

9

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:

%Vor%

Das hat nichts verändert; Es gibt immer noch einen Kompilierzeitfehler, wenn cexpr und nmea kombiniert werden.

    
fghj 24.07.2017, 18:00
quelle

1 Antwort

1

Es ist bekannt, Problem, verwandte Links:

Frachtproblem 1

Frachtproblem 2

Fracht rfc

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 von nom::ErrorKind<E> ist, während bei "verbose errors" der Typ nom::verbose_errors::Err<E> eine dedizierte enum ist, also der " Mit-Feature "und" ohne Feature "-Schnittstellen sind inkompatibel.

    
fghj 25.07.2017, 19:10
quelle

Tags und Links