Skip to content

工程结构

一个 Cargo package 对应一份 Cargo.toml。二进制入口是 src/main.rs,库入口是 src/lib.rs。两者可以同时存在:库放可复用逻辑,二进制只负责启动。

bash
.
├── Cargo.toml
├── Cargo.lock
├── src/
   ├── main.rs
   ├── lib.rs
   └── bin/            # 额外二进制,文件名即命令名
       └── extra.rs
├── examples/
├── tests/              # 集成测试,只能看到 public API
└── benches/

src/bin/examples/tests/benches/ 按约定自动发现,不必在 Cargo.toml 里逐个声明。需要改名称或路径时再用 [[bin]]

Cargo.toml

toml
[package]
name = "demo"
version = "0.1.0"
edition = "2024"

[dependencies]
serde = { version = "1", features = ["derive"] }

[dev-dependencies]
pretty_assertions = "1"

edition 决定语言版本,与 rustc 版本不是一回事。[dependencies] 参与编译产物;[dev-dependencies] 只用于测试、示例和 benchmark。

同一 package 里,二进制 crate 依赖本包的库 crate,main.rs 通过包名调用库代码:

rust
fn main() {
    demo::run();
}

配置与产物

默认 cargo build / cargo run 使用 dev 配置,保留调试信息。--release 走优化配置,产物在 target/release/

Cargo.lock 锁定依赖精确版本。target/ 是构建缓存与产物,不进版本库。

workspace

多包仓库用 workspace,共享一份 Cargo.locktarget/

toml
[workspace]
members = ["crates/core", "crates/cli"]
resolver = "3"

[workspace.dependencies]
serde = { version = "1", features = ["derive"] }

成员在各自的 Cargo.toml 里用 serde.workspace = true 引用统一版本。Tauri、CLI + 核心库这类拆分常见于 workspace。

日常命令

bash
cargo fmt
cargo clippy --all-targets
cargo check
cargo test
cargo run
cargo build --release

fmt / clippy 由 rustup 组件提供,不改变语义,只约束风格和常见错误。

基于 MIT 许可发布