Default run pada cargo run

22 May 2020

Sebelumnya pada postingan tentang [Cargo run multi binary]({% post_url 2020-04-18-cargo-run-multi-binary %}) saya mencontohkan bagaimana menjalankan binary khusus menggunakan cargo run, sehingga kita bisa bikin aplikasi secara terpisah berdasarkan nama file.

Kenapa menggunakan multi binary pada saat menjalankan cargo run ?. Karena code fn main() dapat digunakan pada setiap file.

Nah pada artikel sebelumnya saya tidak menjelaskan bagaimana kalau kita menjalankan cargo run tanpa parameter --bin nama?, ternyata cargo akan menampilkan pesan error bahwa tidak ada default run binary yang harus dijalankan ketika parameter --bin tidak disertakan.

$ cargo run
error: `cargo run` could not determine which binary to run. 
Use the `--bin` option to specify a binary, or the `default-run` manifest key.
available binaries: main, basic, simple_server

Untuk itu kita perlu mendefinisikan juga untuk file main.rs sebagai default jika kita menjalankan cargo run tanpa parameter --bin.

[package]
name = "rabbit"
version = "0.1.0"
authors = ["Name <name@example.com>"]
edition = "2018"
default-run = "main"

[[bin]]
name = "main"
path = "src/main.rs"

[[bin]]
name = "publisher"
path = "src/publisher.rs"

[[bin]]
name = "subscriber"
path = "src/subscriber.rs"

Dapat dilihat bahwa kita menambahkan keyword default-run pada section package untuk memberitahu cargo file mana yang akan dijadikan bootstrap pada saat perintah cargo run dijalankan tanpa parameter --bin. Dan juga membuat definisi khusus untuk file main.rs dengan nama main.

[package]
default-run = "main"

[[bin]]
name = "main"
path = "src/main.rs"

Setelah kita menambahkan default-run maka cargo tidak akan komplain pada saat menjalankan cargo run.

$ cargo run     
Finished dev [unoptimized + debuginfo] target(s) in 0.06s
Running `target/debug/main`
Hello, world!

Sekian.