Rust 的多个 binary crate(可执行程序)默认放在 src/bin/,但不是必须只能在那里

最后发布时间:2026-05-09 10:29:39 浏览量:

不是。Rust 的多个 binary crate(可执行程序)默认放在 src/bin/,但不是必须只能在那里。

Rust 支持多种方式定义多个 bin。

1. 默认方式:src/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 → 一个额外 bin
  • bin/client.rs → 一个额外 bin

2. 可以放任意位置([[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 的自动发现规则。


3. workspace 更常见

大型项目更常见的是:

workspace/
├── Cargo.toml
├── server/
│   └── Cargo.toml
├── client/
│   └── Cargo.toml
└── cli/
    └── Cargo.toml

workspace Cargo.toml:

[workspace]
members = ["server", "client", "cli"]

这里:

  • 每个子目录是独立 crate
  • 每个 crate 都能是 bin
  • 更适合大型项目

4. 一个 package 可以有多个 bin

Rust 里:

  • package(Cargo.toml)

    • 可以有:

      • 一个 library crate
      • 多个 binary crate

例如:

src/lib.rs
src/main.rs
src/bin/*.rs

这里:

文件类型
lib.rslibrary crate
main.rs默认 bin crate
bin/*.rs额外 bin crate

5. bin 还能是目录

不仅能是:

src/bin/server.rs

还能:

src/bin/server/main.rs

例如:

src/
└── bin/
    ├── server/
    │   ├── main.rs
    │   └── config.rs
    └── client.rs

这样适合复杂 CLI。


Rust 为什么这样设计?

Rust 的:

src/main.rs

只是“默认约定”。

Cargo 自动扫描:

  • src/main.rs
  • src/lib.rs
  • src/bin/*

但 Cargo 本身支持任意路径。


总结

多个 bin crate:

方式是否必须
src/bin/*.rs默认自动发现
[[bin]] path=...完全自定义
workspace 多 crate大项目推荐

所以:

Rust 的多个 bin crate 不必须在 src/bin
src/bin 只是 Cargo 的默认自动发现目录。