主题
工程结构
一个 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.lock 和 target/:
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 --releasefmt / clippy 由 rustup 组件提供,不改变语义,只约束风格和常见错误。
