不是。Rust 的多个 binary crate(可执行程序)默认放在 src/bin/,但不是必须只能在那里。
Rust 支持多种方式定义多个 bin。
这是最简单、最常见的方法。
目录:
project/
├── Cargo.toml
└── src/
├── main.rs
└── bin/
├── server.rs
└── client.rs
运行:
cargo run --bin server
cargo run --bin client
这里:
main.rs → 默认主程序bin/server.rs → 一个额外 binbin/client.rs → 一个额外 bin你可以在 Cargo.toml 手动指定:
[[bin]]
name = "server"
path = "apps/server/main.rs"
[[bin]]
name = "client"
path = "tools/client.rs"
目录:
project/
├── Cargo.toml
├── apps/
│ └── server/
│ └── main.rs
└── tools/
└── client.rs
运行:
cargo run --bin server
cargo run --bin client
所以:
bin crate 不必须在
src/bin
只是:
src/bin
是 Cargo 的自动发现规则。
大型项目更常见的是:
workspace/
├── Cargo.toml
├── server/
│ └── Cargo.toml
├── client/
│ └── Cargo.toml
└── cli/
└── Cargo.toml
workspace Cargo.toml:
[workspace]
members = ["server", "client", "cli"]
这里:
Rust 里:
package(Cargo.toml)
可以有:
例如:
src/lib.rs
src/main.rs
src/bin/*.rs
这里:
| 文件 | 类型 |
|---|---|
| lib.rs | library crate |
| main.rs | 默认 bin crate |
| bin/*.rs | 额外 bin crate |
不仅能是:
src/bin/server.rs
还能:
src/bin/server/main.rs
例如:
src/
└── bin/
├── server/
│ ├── main.rs
│ └── config.rs
└── client.rs
这样适合复杂 CLI。
Rust 的:
src/main.rs
只是“默认约定”。
Cargo 自动扫描:
src/main.rssrc/lib.rssrc/bin/*但 Cargo 本身支持任意路径。
多个 bin crate:
| 方式 | 是否必须 |
|---|---|
src/bin/*.rs | 默认自动发现 |
[[bin]] path=... | 完全自定义 |
| workspace 多 crate | 大项目推荐 |
所以:
Rust 的多个 bin crate 不必须在
src/bin,src/bin只是 Cargo 的默认自动发现目录。