Ich möchte ein Projekt mit a daemon
und client
a erstellen und eine Verbindung über einen Unix-Socket herstellen.
A client
und a daemon
erfordern zwei Binärdateien. Wie kann ich also Cargo
zwei Ziele aus zwei verschiedenen Quellen erstellen?
Um ein bisschen Fantasie hinzuzufügen, hätte ich gerne eine library
für den Hauptteil der daemon
und nur eine Binärdatei, um sie zu umwickeln und über Sockets zu kommunizieren.
Wir haben also diese Art von Baumarchitektur:
├── Cargo.toml
├── target
| └── debug
| ├── daemon
│ └── client
└── src
├── daemon
│ ├── bin
│ │ └── main.rs
│ └── lib
│ └── lib.rs
└── client
└── bin
└── main.rs
Ich könnte eine ausführbare Datei erstellen, die beide Probleme verwaltet, aber das möchte ich nicht tun, es sei denn, es ist eine sehr gute Praxis.
rust
rust-cargo
RallionRl
quelle
quelle
Antworten:
Sie können mehrere Binärdateien angeben verwenden
[[bin]]
, wie erwähnt hier :[[bin]] name = "daemon" path = "src/daemon/bin/main.rs" [[bin]] name = "client" path = "src/client/bin/main.rs"
Tipp: Wenn Sie stattdessen diese Dateien in
src/bin/daemon.rs
undsrc/bin/client.rs
ablegen, erhalten Sie zwei ausführbare Dateien mit dem Namendaemon
undclient
während Cargo alle Dateiensrc/bin
automatisch in ausführbare Dateien mit demselben Namen kompiliert . Sie müssen Namen und Pfade wie im obigen Snippet nur angeben, wenn Sie diese Konvention nicht befolgen.quelle
target/debug/$name
wo$name
diename
Sie in Cargo.toml angeben.cargo install
Befehl. Versuchen Sie, die Ausgabe von zu lesencargo help install
.Eine andere Möglichkeit ist die Verwendung der Arbeitsbereichsfunktion . Dies bietet mehr Flexibilität, da wir mehr als eine Bibliothek haben können. Beispiel Projektstruktur:
Inhalt der Wurzel
Cargo.toml
:[workspace] members = ["cli", "core", "daemon", "gui", "rpc"]
quelle
[[bin]]
. Können Sie uns näher erläutern, was Sie getan haben, damit dies funktioniert? Ich habe den folgenden Fehler erhalten:use ::engine::RuleEngine;
could not find engine in {{root}}
Ein anderes Format könnte darin bestehen, das zu replizieren, was der Quellcode von Crates.io getan hat, wenn Sie ein umfangreiches Projekt haben, etwa:
Hauptbibliothek in src mit einem Bin-Ordner mit Ihren ausführbaren Dateien. Rufen Sie dann von Ihren ausführbaren Dateien aus Ihre Hauptbibliothekskiste auf.
Auf diese Weise ist Ihre Bibliothek zentralisiert, sodass Sie Dinge leichter finden können, wenn sie zwischengespeichert werden.
quelle