【Rust】Cargoプロジェクトで複数バイナリをビルドしたい時
Workspaceなしパターン
hr.icon
Cargoでブロジェクトを作るとmain.rsってのが生成されてるはず。
こいつは、メインのバイナリクレートになる。
cargo runとか実行した際のエントリポイントになるということ。
基本的にmain.rsだけあればいいのだが、ユースケースによっては、main.rs以外のエントリポイント、つまり、バイナリが欲しいという時もあるだろう。
そういう時は、Cargo.tomlの設定をしない限りは、src/bin配下にmain関数を持つファイルを置いておくと、cargo build時にそれらもエントリポイントとしてコンパイルしてくれる。
code: dir
src/
main.rs
bin/
hoge.rs
boge/ <- ディレクトリの中にmain.rsというのでも可能
main.rs
code: hoge.rs
fn main() {
...
}
これでcargo buildを実行すると、main, hoge, bogeの3つのバイナリがbuildディレクトリに生成されてる。
また、binディレクトリ以外に配置したいという願いもあるかもしれない。
そういう時はCargo.tomlをいじってあげる。
code: Cargo.toml
...
bin
name = "tool1"
path = "src/tools/tool1.rs"
code: dir
src/
main.rs
tools/
tool1.rs
これでうまく行く。
最後に今のままだと実は普通にcargo runすると以下のエラーが出て失敗する。
code: error
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: ruspra, tool1
Cargoプロジェクトの中に2つ以上バイナリがあると、どれを実行すればいいのかわからないってなるらしい。
これの解消方法は2つ
1. cargo run --bin tool1というふうに--binオプションを使う。
2. Cargo.tomlにdefault-runを記述し、cargo runを実行する。
code: Cargo.toml
name = "my-project"
version = "0.1.0"
edition = "2024"
default-run = "my-project"