update cargo contents

pull/450/head
sunface 3 years ago
parent 01fddeea0b
commit 68e27fe121

@ -1,17 +1,17 @@
# 上手使用 # 上手使用
Cargo 会在安装 Rust 的时候一并进行安装,无需我们手动的操作执行,安装 Rust 参见[这里](https://course.rs/first-try/installation.html)。 Cargo 会在安装 Rust 的时候一并进行安装,无需我们手动的操作执行,安装 Rust 参见[这里](https://course.rs/first-try/installation.html)。
在开始之前,先来明确一个名词: `Package`,由于 `Crate` 被翻译成包,因此 `Package` 再被翻译成包就很不合适。为此我们决定不对 `Package` 进行翻译,但是大家可以将其理解为软件包、项目或工程 在开始之前,先来明确一个名词: `Package`,由于 `Crate` 被翻译成包,因此 `Package` 再被翻译成包就很不合适,经过斟酌,我们决定翻译成项目,你也可以理解为工程、软件包,总之,在本书中`Package` 意味着项目,而项目也意味着 `Package`
安装完成后,接下来使用 `Cargo` 来创建一个新的[二进制 Package](https://course.rs/basic/crate-module/crate.html),二进制意味着该 `Package` 可以作为一个服务运行或被编译成可执行文件运行。 安装完成后,接下来使用 `Cargo` 来创建一个新的[二进制项目](https://course.rs/basic/crate-module/crate.html),二进制意味着该项目可以作为一个服务运行或被编译成可执行文件运行。
```rust ```rust
$ cargo new hello_world $ cargo new hello_world
``` ```
这里我们使用 `cargo new` 创建一个新的 Package ,事实上该命令等价于 `cargo new hello_world --bin``bin` 是 `binary` 的简写,代表着二进制程序,由于 `--bin` 是默认参数,因此可以对其进行省略。 这里我们使用 `cargo new` 创建一个新的项目 ,事实上该命令等价于 `cargo new hello_world --bin``bin` 是 `binary` 的简写,代表着二进制程序,由于 `--bin` 是默认参数,因此可以对其进行省略。
创建成功后,先来看看 `Package`目录结构长啥样: 创建成功后,先来看看项目的基本目录结构长啥样:
```shell ```shell
$ cd hello_world $ cd hello_world
$ tree . $ tree .

@ -1,13 +1,13 @@
# 添加依赖 # 添加依赖
[`crates.io`](https://crates.io) 是 Rust 社区维护的中心化 `package` 注册服务,用户可以在其中寻找和下载所需的 `package`。对于 `cargo` 来说,默认就是从这里下载依赖。 [`crates.io`](https://crates.io) 是 Rust 社区维护的中心化注册服务,用户可以在其中寻找和下载所需的。对于 `cargo` 来说,默认就是从这里下载依赖。
下面我们来添加一个 `time` 依赖包,若你的 `Cargo.toml` 文件中没有 `[dependencies]` 部分,就手动添加一个,然后添加目标包名和版本号: 下面我们来添加一个 `time` 依赖包,若你的 `Cargo.toml` 文件中没有 `[dependencies]` 部分,就手动添加一个,添加目标包名和版本号:
```toml ```toml
[dependencies] [dependencies]
time = "0.1.12" time = "0.1.12"
``` ```
可以看到我们指定了 `time` 包的版本号 "0.1.12",关于版本号,实际上还有其它的指定方式,具体参见[指定依赖项](https://course.rs/cargo/reference/specify-deps/intro.html)章节。 可以看到我们指定了 `time` 包的版本号 "0.1.12",关于版本号,实际上还有其它的指定方式,具体参见[指定依赖项](https://course.rs/cargo/reference/specify-deps.html)章节。
如果想继续添加 `regexp` 包,只需在 `time` 包后面添加即可 : 如果想继续添加 `regexp` 包,只需在 `time` 包后面添加即可 :
```toml ```toml

@ -1,5 +1,5 @@
# 为何会有Cargo # 为何会有Cargo
根据之前学习的知识Rust 有两种类型的包: `lib` 包和二进制包,前者是俗称的依赖包,用于被其它包所引入,而后者是一个应用服务,可以编译成二进制可执行文件进行运行。 根据之前学习的知识Rust 有两种类型的包: 库包和二进制包,前者是我们经常使用的依赖包,用于被其它包所引入,而后者是一个应用服务,可以编译成二进制可执行文件进行运行。
包是通过 Rust 编译器 `rustc` 进行编译的: 包是通过 Rust 编译器 `rustc` 进行编译的:
```rust ```rust
@ -10,9 +10,9 @@ Hello, world!
上面我们直接使用 `rustc` 对二进制包 `hello.rs` 进行编译,生成二进制可执行文件 `hello`,并对其进行运行。 上面我们直接使用 `rustc` 对二进制包 `hello.rs` 进行编译,生成二进制可执行文件 `hello`,并对其进行运行。
上面的方式虽然简单,但是有几个问题: 该方式虽然简单,但有几个问题:
- 必须要指定文件名编译,当 package 复杂后,这种编译方式也随之更加复杂 - 必须要指定文件名编译,当项目复杂后,这种编译方式也随之更加复杂
- 如果要指定编译参数,情况将更加复杂 - 如果要指定编译参数,情况将更加复杂
最关键的是,外部依赖库的引入也将是一个大问题。大部分实际的项目都有不少依赖包,而这些依赖包又间接的依赖了新的依赖包,在这种复杂情况下,如何管理依赖包及其版本也成为一个相当棘手的问题。 最关键的是,外部依赖库的引入也将是一个大问题。大部分实际的项目都有不少依赖包,而这些依赖包又间接的依赖了新的依赖包,在这种复杂情况下,如何管理依赖包及其版本也成为一个相当棘手的问题。
@ -24,9 +24,9 @@ Hello, world!
总之,`Cargo` 为了实现目标,做了四件事: 总之,`Cargo` 为了实现目标,做了四件事:
- 引入两个元数据文件,包含 `package` 的方方面面信息: `Cargo.toml``Cargo.lock` - 引入两个元数据文件,包含项目的方方面面信息: `Cargo.toml``Cargo.lock`
- 获取和构建 `package` 的依赖,例如 `Cargo.toml` 中的依赖包版本描述,以及从 `crates.io` 下载包 - 获取和构建项目的依赖,例如 `Cargo.toml` 中的依赖包版本描述,以及从 `crates.io` 下载包
- 调用 `rustc` (或其它编译器) 并使用的正确的参数来构建 `package`,例如 `cargo build` - 调用 `rustc` (或其它编译器) 并使用的正确的参数来构建项目,例如 `cargo build`
- 引入一些惯例,让 `package` 的使用更加简单 - 引入一些惯例,让项目的使用更加简单
毫不夸张的说,得益于 `Cargo` 的标准化,只要你使用它构建过一个项目,那构建其它使用 `Cargo` 的项目,也将不存在任何困难。 毫不夸张的说,得益于 `Cargo` 的标准化,只要你使用它构建过一个项目,那构建其它使用 `Cargo` 的项目,也将不存在任何困难。

@ -1,6 +1,4 @@
# 修改默认的文件目录 # Cargo Target
## Cargo Target
**Cargo 项目中包含有一些对象,它们包含的源代码文件可以被编译成相应的包,这些对象被称之为 Cargo Target**。例如[之前章节](https://course.rs/cargo/guide/package-layout.html)提到的库对象 `Library` 、二进制对象 `Binary`、示例对象 `Examples`、测试对象 `Tests` 和 基准性能对象 `Benches` 都是 Cargo Target。 **Cargo 项目中包含有一些对象,它们包含的源代码文件可以被编译成相应的包,这些对象被称之为 Cargo Target**。例如[之前章节](https://course.rs/cargo/guide/package-layout.html)提到的库对象 `Library` 、二进制对象 `Binary`、示例对象 `Examples`、测试对象 `Tests` 和 基准性能对象 `Benches` 都是 Cargo Target。
本章节我们一起来看看该如何在 `Cargo.toml` 清单中配置这些对象,当然,大部分时候都无需手动配置,因为默认的配置通常由项目目录的布局自动推断出来。 本章节我们一起来看看该如何在 `Cargo.toml` 清单中配置这些对象,当然,大部分时候都无需手动配置,因为默认的配置通常由项目目录的布局自动推断出来。

Loading…
Cancel
Save