学习 Rust 的工作空间, 包, Crate 和模块管理

Rust 项目一旦增大,用 cargo new demo 创建的单一包,单个 src/main.rs 的项目组织方式不能满足需求了

$ cargo new demo
$ tree demo
demo
├── Cargo.toml
└── src
          └── main.rs

比如至少要一个 src/lib.rs 文件吧,复杂些还需在  src 目录中创建模块层次的目录; 更大型项目还要在 Package 上边创建 Workspace。

这里就引出了 Rust 项目的几个概念,即 Package, Crate, 模块,以及 Workspace,再就是如何在代码中引用不同 Package, Crate, 模块中的资源要用到路径。

比如这个最基本的 demo 项目中

  1. Package: 一个可以构建,测试和分享 Crate 的单元,它可包含可选的 lib crate 和多个二进制 crate 项。  demo 就是一个 Package,src/main.rs 就是一个二进制 crate, 如果有 src/lib.rs 就是一 个 lib crate, 它只能有一个。其他的放在 src/bin/* 中的多个 *.rs 文件是一个个独立的二进制 crate,它们会被编译成多个执行文件。下面将会演示。
  2. Crates: Rust 编译器编译的最小单位。每个  crate 会输出一二进制文件或 lib
  3. Module: crate 内部的代码层次组织结构,由 mod xxx; 或  mod xxx { ... } 定义
  4. Path: 访问 module, 函数,类型等和路径,分绝对路径(crate::foo::bar::baz, lib::something::func)与相对路径(self::foo::bar, super::baz)

阅读全文 >>