Create chapter_3_17_1.md

This commit is contained in:
令狐一冲
2023-05-18 10:30:04 +08:00
committed by GitHub
parent d28696c90e
commit 367ef7a769

View File

@@ -0,0 +1,47 @@
# 3.17.1 包、crate和模块介绍
关于三者的描述如下:
-Package是一个 Cargo 项目,它包含了一个 Cargo.toml 配置文件和一些 Rust 代码文件。一个包可以包含多个 crate并且可以有多种构建方式和配置。
- crateCrate是一个可以编译成库或二进制文件的 Rust 代码单元。每个 crate 都有一个唯一的名称,它可以被其他 crate 引用也可以被其它包中的代码引用。每个crate都有一个crate root 它是一个源文件Rust 编译器以它为起始点来构成crate根模块。对于crate来说crate root要么是src/main.rs对于二进制crate来说要么是src/lib.rs对于库crate来说
- 模块Module是一种组织 Rust 代码的方式它可以将相关的代码放在一起形成一个代码块。模块可以嵌套可以有多个不同的访问级别public、private并且可以从其他模块中引用和访问。
三者的范围为:模块< crate < 包即一个包包含一个或多个crate一个crate可以包含多个模块。
## 1. 包含一个crate的包
下面的命令会创建一个Rust工程这个工程同时是一个crate也是一个包只有一个crate的包
```
cargo new main
```
进入main文件夹其目录层级如下
![注释](../../assets/35.png)
其中Cargo.toml的内容如下
![注释](../../assets/36.png)
可以看到这个crate的名字为main。
## 2. 包含多个crate的包
下面再创建一个稍微复杂一点的包。执行如下几条命令:
```
mkdir my-pack # 创建包文件夹
cd my-pack
cargo new my-lib --lib # 创建一个库crate
cargo new main # 创建一个可执行的二进制crate
```
然后在my-pack文件夹中添加文件Cargo.toml其内容如下
```TOML
[workspace]
members = [
"main",
"my-lib",
]
```
最后的目录层级关系如下:
![注释](../../assets/37.png)
上面的步骤就创建了一个包my-pack这个包包含两个crate分别是my-lib和main。