Crate 与 Package
学习目标
- 理解 Package、Crate、Module 的关系
- 区分二进制 crate 和库 crate
- 掌握 Cargo.toml 配置
核心概念
层级关系
Package(一个 Cargo.toml)
└── Crate(编译单元)
├── 二进制 crate(src/main.rs)
└── 库 crate(src/lib.rs)
└── Module(代码组织)
二进制 vs 库
fn main() {
my_lib::greet("World");
}
pub fn greet(name: &str) {
println!("Hello, {}!", name);
}
多二进制 crate
src/
├── main.rs // 默认二进制
├── lib.rs // 库
└── bin/
├── tool1.rs // cargo run --bin tool1
└── tool2.rs // cargo run --bin tool2
Cargo.toml 配置
[package]
name = "my_project"
version = "0.1.0"
edition = "2021"
description = "我的项目"
license = "MIT"
[lib]
name = "my_lib"
path = "src/lib.rs"
[[bin]]
name = "my_tool"
path = "src/bin/tool.rs"
[dependencies]
serde = "1.0"
[dev-dependencies]
tempfile = "3"
crate 路径
crate::module::function();
self::function();
super::function();
实践练习
练习 1:创建库项目
cargo new my_math --lib
pub fn add(a: i32, b: i32) -> i32 { a + b }
pub fn multiply(a: i32, b: i32) -> i32 { a * b }
use my_math::{add, multiply};
fn main() {
println!("{}", add(2, 3));
println!("{}", multiply(4, 5));
}
小结
| 概念 | 说明 |
|---|
| Package | 一个 Cargo.toml 管理的项目 |
| Crate | 编译单元(二进制或库) |
| Module | 代码组织单元 |
src/main.rs | 二进制 crate 入口 |
src/lib.rs | 库 crate 入口 |