Ich möchte ein Rust-Paket erstellen, das sowohl eine wiederverwendbare Bibliothek (in der der größte Teil des Programms implementiert ist) als auch eine ausführbare Datei enthält, die es verwendet.
Angenommen, ich habe keine Semantik im Rust-Modulsystem verwechselt. Wie sollte meine Cargo.toml
Datei aussehen?
rust
rust-cargo
Andrew Wagner
quelle
quelle
cargo build --verbose
, werden sie in derrustc
Befehlszeile angezeigt.[[bin]]
es eine Reihe von Tabellen gibt? Warum verwenden[[bin]]
und nicht[bin]
? Es scheint keine Dokumentation dazu zu geben.Sie können auch einfach Binärquellen
src/bin
und den Rest Ihrer Quellen eingebensrc
. Sie können ein Beispiel in meinem Projekt sehen . Sie müssen IhreCargo.toml
überhaupt nicht ändern , und jede Quelldatei wird zu einer Binärdatei mit demselben Namen kompiliert.Die Konfiguration der anderen Antwort wird dann ersetzt durch:
Cargo.toml
src / lib.rs
src / bin / mybin.rs
Und führen Sie es aus:
Außerdem können Sie einfach eine erstellen
src/main.rs
, die als ausführbare defacto-Datei verwendet wird. Leider widerspricht dies demcargo doc
Befehl:quelle
extern crate example;
ist ab Rost 2018 nicht mehr erforderlich, Sie könnenuse example::really_complicated_code;
die Funktion direkt schreiben und verwenden, ohne den Bereich zu benennenEine alternative Lösung besteht darin, nicht zu versuchen, beide Dinge in einem Paket zusammenzufassen. Für etwas größere Projekte mit einer benutzerfreundlichen ausführbaren Datei fand ich es sehr schön, eine zu verwenden Arbeitsbereich zu verwenden
Wir erstellen ein Binärprojekt, das eine Bibliothek enthält:
Cargo.toml
Dies verwendet den
[workspace]
Schlüssel und hängt von der Bibliothek ab:src / main.rs
mylibrary / src / lib.rs
Und führen Sie es aus:
Dieses System bietet zwei große Vorteile:
Die Binärdatei kann jetzt Abhängigkeiten verwenden, die nur für sie gelten. Sie können beispielsweise viele Kisten einfügen, um die Benutzererfahrung zu verbessern, z. B. Befehlszeilen-Parser oder Terminal-Formatierung. Keines davon "infiziert" die Bibliothek.
Der Arbeitsbereich verhindert redundante Builds jeder Komponente. Wenn wir
cargo build
sowohl im Verzeichnismylibrary
als auch imthe-binary
Verzeichnis ausführen , wird die Bibliothek nicht beide Male erstellt - sie wird von beiden Projekten gemeinsam genutzt.quelle
main.rs
, zerlege es dann in Module, wenn es größer wird, teilesrc/bin
es schließlich auf, wenn es nur ein wenig größer ist, und gehe dann zu einem Arbeitsbereich, wenn ich anfange, die Kernlogik stark wiederzuverwenden.cargo test
scheint aber Unit-Tests in lib.rscargo test --all
Sie können
lib.rs
undmain.rs
zu Quellordner zusammenfügen. Es gibt keinen Konflikt und Fracht wird beides bauen.Um einen Dokumentationskonflikt zu lösen, fügen Sie Folgendes hinzu
Cargo.toml
:quelle