Rust, cargo runでsrc/main.rs以外のファイルを実行
RustのCargoでcargo run
コマンドを実行すると、デフォルトではsrc/main.rs
がコンパイル・実行される。
ここでは、src/main.rs
以外のファイルを実行する方法について説明する。
例えば、VSCode + rust-analyzer(拡張機能)では、cargo run --bin <bin-name>
で実行できるファイルのmain
関数の上にrun
ボタンが表示され、簡単に実行できる。
学習用に小さいコードを色々試してみたい場合はsrc/bin
に.rs
ファイルを作っていくのがオススメ。
cargo run --bin
cargo run
では、実行するターゲット(バイナリターゲット)を--bin
オプションで指定できる。
$ cargo run --bin <bin-name>
以降で説明するように、ターゲットにはsrc/bin
に置いたファイル名やCargo.toml
に記述した名前を指定できる。
なお、src/main.rs
はパッケージ名(Cargo.toml
の[package]
のname
)がターゲット名となる。ターゲットが複数ある場合は明示的にパッケージ名を指定する必要がある。
$ cargo run --bin <package-name>
Cargo.toml
の[package]
のdefault-run
にターゲット名を指定すると、オプション無しのcargo run
でそれが実行される。
src/binに.rsファイルを置く
src/bin
ディレクトリに.rs
ファイルを置くと、ファイル名(拡張子なし)がターゲット名となる。
src/bin
内にサブディレクトリを作成することもできる。サブディレクトリ内にはmain.rs
が必要。ディレクトリ名がターゲット名となる。
src/bin/<file-name>.rs
およびsrc/bin/<dir-name>/main.rs
を、以下のコマンドで実行できる。
$ cargo run --bin <file-name>
$ cargo run --bin <dir-name>
具体的な例として以下のレイアウトを考える。
.
├── Cargo.lock
├── Cargo.toml
└── src/
├── lib.rs
├── main.rs
└── bin/
├── named-executable.rs
├── another-executable.rs
└── multi-file-executable/
├── main.rs
└── some_module.rs
以下のコマンドでそれぞれのファイルを実行できる。
$ cargo run --bin named-executable
$ cargo run --bin another-executable
$ cargo run --bin multi-file-executable
上述のように、ターゲットが複数ある場合は--bin
で明示的にターゲットを指定する必要がある。src/main.rs
はパッケージ名(Cargo.toml
の[package]
のname
)がターゲット名となる。
$ cargo run --bin <package-name>
Cargo.tomlの[[bin]]
に設定を記述
src/bin
以外のファイルを実行したい場合、Cargo.toml
の[[bin]]
セクションに設定を記述する。[[bin]]
セクションは複数あってもよい。
[[bin]]
name = "<name>"
path = "path/to/file.rs"
以下のコマンドで実行できる。
$ cargo run --bin <name>
path
はCargo.toml
があるディレクトリからの相対パス。
cargo buildやcargo checkへの影響
バイナリターゲットが複数ある場合、cargo build
やcargo check
ではすべてのファイルに対してビルドやチェックが実行される。
個別のファイルのみを対象としたい場合は、--bin
オプションを指定する。
$ cargo build --bin <name>