rust-包和箱子

📦 图解 Rust 代码组织层级

包含
分为
可以包含
Package
Crate
二进制 Crate
库 Crate
main.rs
lib.rs
多个二进制 Crate
src/bin/*.rs

1️⃣ 箱子(Crate)——最小的编译单元

  • 类型

    • 🎁 二进制箱子:可执行程序(如命令行工具),必须有 main() 函数。
      • 示例:src/main.rs
    • 📚 库箱子:共享功能(如 rand 库),没有 main()
      • 示例:src/lib.rs
  • 特点

    • 编译器每次处理 一个箱子(即使你直接编译单个文件)。
    • 箱子根(Crate Root)是编译器开始读取的入口文件(如 main.rslib.rs)。

2️⃣ 包(Package)——管理箱子的容器

  • 规则

    • 一个包 必须包含至少一个箱子(二进制或库)。
    • 一个包 最多只能有一个库箱子
    • 一个包可以有 多个二进制箱子(通过 src/bin/*.rs 添加)。
  • 示例

    my-project/
    ├── Cargo.toml  # 包的配置文件
    └── src/
        ├── main.rs    # 二进制箱子(默认与包同名)
        └── lib.rs     # 库箱子(如果存在)
        └── bin/       # 额外二进制箱子
            ├── tool1.rs
            └── tool2.rs
    

🛠️ 创建包时的自动结构

当你运行 cargo new

  • 二进制包

    cargo new my-app
    

    生成:

    my-app/
    ├── Cargo.toml
    └── src/
        └── main.rs   # 二进制箱子入口
    
  • 库包

    cargo new my-lib --lib
    

    生成:

    my-lib/
    ├── Cargo.toml
    └── src/
        └── lib.rs    # 库箱子入口
    

🌰 实际案例对比

概念类比示例
箱子单个“代码盒子”main.rslib.rs
装多个盒子的“快递”整个项目目录

常见疑问

  • Q:为什么要有箱子和包的分层?
    A:箱子是编译的最小单元(Rust 的编译优化以箱子为单位),包是方便人类管理的逻辑单元(通过 Cargo.toml 统一配置)。

  • Q:如何共享代码?
    A:将公共代码放在 lib.rs 中,二进制箱子通过 use my-lib; 调用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值