Saya ingin membuat proyek dengan a daemon
dan a client
, menghubungkan melalui soket unix.
A client
dan a daemon
membutuhkan dua biner, jadi bagaimana cara mengetahui Cargo
untuk membangun dua target dari dua sumber yang berbeda?
Untuk menambahkan sedikit fantasi, saya ingin memiliki library
bagian utama daemon
, dan hanya memiliki biner untuk membungkusnya dan berkomunikasi melalui soket.
Jadi, kami memiliki arsitektur pohon semacam ini:
├── Cargo.toml
├── target
| └── debug
| ├── daemon
│ └── client
└── src
├── daemon
│ ├── bin
│ │ └── main.rs
│ └── lib
│ └── lib.rs
└── client
└── bin
└── main.rs
Saya dapat membuat satu yang dapat dieksekusi yang mengelola kedua masalah tersebut, tetapi bukan itu yang ingin saya lakukan, kecuali jika itu adalah praktik yang sangat baik.
rust
rust-cargo
RallionRl
sumber
sumber
Jawaban:
Anda dapat menentukan beberapa binari menggunakan
[[bin]]
, seperti yang disebutkan di sini :[[bin]] name = "daemon" path = "src/daemon/bin/main.rs" [[bin]] name = "client" path = "src/client/bin/main.rs"
Tip: Jika Anda memasukkan file-file ini
src/bin/daemon.rs
dansrc/bin/client.rs
, Anda akan mendapatkan dua file yang dapat dieksekusi bernamadaemon
danclient
sebagai Cargo mengkompilasi semua filesrc/bin
menjadi file yang dapat dieksekusi dengan nama yang sama secara otomatis. Anda perlu menentukan nama dan jalur seperti pada cuplikan di atas hanya jika Anda tidak mengikuti konvensi ini.sumber
target/debug/$name
tempat$name
yangname
Anda tentukan di Cargo.toml.cargo install
perintah. Coba baca keluaran daricargo help install
.Cara lain adalah dengan menggunakan fitur ruang kerja . Ini akan memberikan lebih banyak fleksibilitas karena kita dapat memiliki lebih dari satu perpustakaan. Contoh struktur proyek:
Isi root
Cargo.toml
:[workspace] members = ["cli", "core", "daemon", "gui", "rpc"]
sumber
[[bin]]
. Bisakah Anda memberikan detail lebih lanjut tentang apa yang Anda lakukan agar ini berfungsi? Saya mendapatkan kesalahan berikut:use ::engine::RuleEngine;
could not find engine in {{root}}
Format lain bisa jadi meniru apa yang telah dilakukan kode sumber Crates.io , jika Anda memiliki proyek besar, seperti:
Perpustakaan Utama di src, dengan folder Bin dengan file executable Anda. Kemudian lakukan panggilan ke peti perpustakaan utama Anda dari file yang dapat dieksekusi.
Dengan cara itu perpustakaan Anda terpusat sehingga lebih mudah untuk menemukan hal-hal saat disimpan dalam cache.
sumber