Saya ingin membuat paket Rust yang berisi pustaka yang dapat digunakan kembali (di mana sebagian besar program diimplementasikan), dan juga sebuah executable yang menggunakannya.
Dengan asumsi saya tidak bingung semantik dalam sistem modul Rust, seperti apa Cargo.toml
file saya ?
rust
rust-cargo
Andrew Wagner
sumber
sumber
cargo build --verbose
, Anda akan melihatnya dirustc
baris perintah.[[bin]]
array tabel? Mengapa menggunakan[[bin]]
dan tidak[bin]
? Sepertinya tidak ada dokumentasi tentang ini.Anda juga bisa memasukkan sumber biner
src/bin
dan sisa sumber Andasrc
. Anda dapat melihat contoh di proyek saya . Anda tidak perlu memodifikasiCargo.toml
sama sekali, dan setiap file sumber akan dikompilasi ke biner dengan nama yang sama.Konfigurasi jawaban lain kemudian diganti dengan:
Cargo.toml
src / lib.rs
src / bin / mybin.rs
Dan jalankan:
Selain itu, Anda bisa membuat
src/main.rs
yang akan digunakan sebagai executable defacto. Sayangnya, ini bertentangan dengancargo doc
perintah:sumber
extern crate example;
tidak diperlukan pada karat 2018, Anda dapat langsung menulisuse example::really_complicated_code;
dan menggunakan fungsi tanpa menyebutkan ruang lingkupSolusi alternatif adalah tidak benar-benar mencoba menjejalkan kedua hal ke dalam satu paket. Untuk proyek yang sedikit lebih besar dengan eksekusi yang ramah, saya merasa senang menggunakan ruang kerja
Kami membuat proyek biner yang menyertakan perpustakaan di dalamnya:
Cargo.toml
Ini menggunakan
[workspace]
kunci dan tergantung pada perpustakaan:src / main.rs
mylibrary / src / lib.rs
Dan jalankan:
Ada dua manfaat besar untuk skema ini:
Biner sekarang dapat menggunakan dependensi yang hanya berlaku untuknya. Misalnya, Anda dapat memasukkan banyak peti untuk meningkatkan pengalaman pengguna, seperti parser baris perintah atau pemformatan terminal. Tidak satu pun dari ini akan "menginfeksi" perpustakaan.
Ruang kerja mencegah membangun berlebihan dari setiap komponen. Jika kita menjalankan
cargo build
keduanya pada direktorimylibrary
danthe-binary
, perpustakaan tidak akan dibangun dua kali - itu dibagi antara kedua proyek.sumber
main.rs
, kemudian memecahnya menjadi modul-modul karena semakin besar, akhirnya terbelahsrc/bin
ketika itu hanya sedikit lebih besar, kemudian pindah ke ruang kerja ketika saya mulai menggunakan kembali logika inti.cargo test
tampaknya mengabaikan unit test di lib.rscargo test --all
Anda dapat menempatkan
lib.rs
danmain.rs
ke folder sumber secara bersamaan. Tidak ada konflik dan kargo akan membangun keduanya.Untuk menyelesaikan konflik documentaion, tambahkan ke
Cargo.toml
:sumber