You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
|
|
# 上手使用
|
|
|
|
|
Cargo 会在安装 Rust 的时候一并进行安装,无需我们手动的操作执行,安装 Rust 参见[这里](https://course.rs/first-try/installation.html)。
|
|
|
|
|
|
|
|
|
|
在开始之前,先来明确一个名词: `Package`,由于 `Crate` 被翻译成包,因此 `Package` 再被翻译成包就很不合适。为此我们决定不对 `Package` 进行翻译,但是大家可以将其理解为软件包、项目或工程。
|
|
|
|
|
|
|
|
|
|
安装完成后,接下来使用 `Cargo` 来创建一个新的[二进制 Package](https://course.rs/basic/crate-module/crate.html),二进制意味着该 `Package` 可以作为一个服务运行或被编译成可执行文件运行。
|
|
|
|
|
|
|
|
|
|
```rust
|
|
|
|
|
$ cargo new hello_world
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
这里我们使用 `cargo new` 创建一个新的 Package ,事实上该命令等价于 `cargo new hello_world --bin`,`bin` 是 `binary` 的简写,代表着二进制程序,由于 `--bin` 是默认参数,因此可以对其进行省略。
|
|
|
|
|
|
|
|
|
|
创建成功后,先来看看 `Package` 的目录结构长啥样:
|
|
|
|
|
```shell
|
|
|
|
|
$ cd hello_world
|
|
|
|
|
$ tree .
|
|
|
|
|
.
|
|
|
|
|
├── Cargo.toml
|
|
|
|
|
└── src
|
|
|
|
|
└── main.rs
|
|
|
|
|
|
|
|
|
|
1 directory, 2 files
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
这里有一个很显眼的文件 `Cargo.toml`,一看就知道它是 `Cargo` 使用的配置文件,这个关系类似于: `package.json` 是 `npm` 的配置文件。
|
|
|
|
|
```toml
|
|
|
|
|
[package]
|
|
|
|
|
name = "hello_world"
|
|
|
|
|
version = "0.1.0"
|
|
|
|
|
edition = "2021"
|
|
|
|
|
|
|
|
|
|
[dependencies]
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
以上就是 `Cargo.toml` 的全部内容,它被称之为清单( manifest ),包含了 `Cargo` 编译程序所需的所有元数据。
|
|
|
|
|
|
|
|
|
|
下面是 `src/main.rs` 的内容 :
|
|
|
|
|
```rust
|
|
|
|
|
fn main() {
|
|
|
|
|
println!("Hello, world!");
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
可以看出 `Cargo` 还为我们自动生成了一个 `hello world` 程序,或者说[二进制包](https://course.rs/basic/crate-module/crate.html),对程序进行编译构建:
|
|
|
|
|
```shell
|
|
|
|
|
$ cargo build
|
|
|
|
|
Compiling hello_world v0.1.0 (file:///path/to/package/hello_world)
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
然后再运行编译出的二进制可执行文件:
|
|
|
|
|
```shell
|
|
|
|
|
$ ./target/debug/hello_world
|
|
|
|
|
Hello, world!
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
注意到路径中的 `debug` 了吗?它说明我们刚才的编译是 `Debug` 模式,该模式主要用于测试目的,如果想要进行生产编译,我们需要使用 `Release` 模式 `cargo build --release`,然后通过 `./target/release/hello_world` 运行。
|
|
|
|
|
|
|
|
|
|
除了上面的编译 + 运行方式外,在日常开发中,我们还可以使用一个简单的命令直接运行:
|
|
|
|
|
```shell
|
|
|
|
|
$ cargo run
|
|
|
|
|
Fresh hello_world v0.1.0 (file:///path/to/package/hello_world)
|
|
|
|
|
Running `target/hello_world`
|
|
|
|
|
Hello, world!
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
`cargo run` 会帮我们自动完成编译、运行的过程,当然,该命令也支持 `Release` 模式: `cargo run --release`。
|
|
|
|
|
|
|
|
|
|
> 如果你的程序在跑性能测试 benchmark,一定要使用 `Relase` 模式,因为该模式下,程序会做大量性能优化
|
|
|
|
|
|
|
|
|
|
在快速了解 `Cargo` 的使用方式后,下面,我们将正式进入 Cargo 的学习之旅。
|