Package and Crate

package 是你通过 Cargo 创建的工程或项目,因此在 package 的根目录下会有一个 Cargo.toml 文件。

  1. 🌟 创建一个 package,拥有以下目录结构:
1. .
2. ├── Cargo.toml
3. └── src
4. └── main.rs

6. 1 directory, 2 files
1. # in Cargo.toml
2. [package]
3. name = "hello-package"
4. version = "0.1.0"
5. edition = "2021"

注意! 我们会在包与模块中使用上面的项目作为演示,因此不要删除

  1. 🌟 创建一个 package,拥有以下目录结构:
1. .
2. ├── Cargo.toml
3. └── src
4. └── lib.rs

6. 1 directory, 2 files
1. # in Cargo.toml
2. [package]
3. name = "hello-package1"
4. version = "0.1.0"
5. edition = "2021"

该项目可以安全的移除

  1. 🌟
1. /* 使用你的答案填空 */

3. // Q: package 1# 和 2# 的区别是什么 ?
4. // A: __

包Crate

一个包可以是二进制也可以一个依赖库。每一个包都有一个包根,例如二进制包的包根是 src/main.rs,库包的包根是 src/lib.rs。包根是编译器开始处理源代码文件的地方,同时也是包模块树的根部。

在 package hello-package 中,有一个二进制包,该包与 package 同名 : hello-package, 其中 src/main.rs 是该二进制包的包根.

与 hello-package 类似, hello-package1 同样包含一个包,但是与之前的二进制包不同,该 package 包含的是库包,其中 src/lib.rs 是其包根.

  1. 🌟
1. /* 填空 */

3. // Q: package `hello-package1` 中的库包名称是?
4. // A: __
  1. 🌟🌟 为 hello-package 添加一个库包,并且完成以下目录结构的填空:
1. # 填空
2. .
3. ├── Cargo.lock
4. ├── Cargo.toml
5. ├── src
6. │   ├── __
7. │   └── __

在上一个步骤后,我们的 hello-package 中已经存在两个包:一个二进制包和一个库包,两个包的名称都与 package 相同:hello-package。

  1. 🌟🌟🌟 一个 package 最多只能包含一个库包,但是却可以包含多个二进制包:通过将二进制文件放入到 src/bin 目录下实现: 该目录下的每个文件都是一个独立的二进制包,包名与文件名相同,不再与 package 的名称相同。.
1. # 创建一个 a package 包含以下包:
2. # 1. 三个二进制包: `hello-package`, `main1` and `main2`
3. # 2. 一个库包
4. # 并完成以下目录结构的填空
5. .
6. ├── Cargo.toml
7. ├── Cargo.lock
8. ├── src
9. │   ├── __
10. │   ├── __
11. │   └── __
12. │       └── __
13. │       └── __
14. ├── tests # 存放集成测试文件的目录
15. │   └── some_integration_tests.rs
16. ├── benches # 存放 benchmark 文件的目录dir for benchmark files
17. │   └── simple_bench.rs
18. └── examples # 存放示例文件的目录
19. └── simple_example.rs

可以看到,上面的 package 结构非常标准,你可以在很多 Rust 项目中看到该结构的身影。

你可以在这里找到答案(在 solutions 路径下)