Cargo

本文大部分内容翻译自:The Rust Programming Language

1. Cargo简介

Cargo是Rust的构建系统和软件包管理器,可以为Rust程序完成很多工作,如:

  • 构建代码
  • 下载代码依赖的库
  • 构建这些库

当你写的Rust程序变得越来越复杂,就会需要依赖包,使用Cargo就会让添加依赖变得更容易。

在安装Rust时,Cargo已经被安装好了,可以通过下面命令来查看Cargo的版本号:

1
cargo --version

2. 使用Cargo创建工程 - cargo new

1
cargo new hello_cargo

运行结果如下:
cargo new 运行结果

上面的命令新建了一个名为hello_cargo的路径,工程被命名为hello_cargo,cargo会在这个路径下创建文件。

从上图可以看到,cargo为我们创建了:

  • 两个文件:Cargo.tomlsrc/main.rs
  • 一个路径:src

并且新建了一个有.gitignore文件的Git仓库。如果你在一个已存在的Git仓库下执行cargo new,这些Git文件是不会被创建的。可以使用:

1
cargo new --vcs=git

来覆盖原本的Git仓库文件。

3. Cargo.toml

使用cargo new创建的Cargo.toml如下所示:

1
2
3
4
5
6
7
8
9
[package]
name = "hello_cargo"
version = "0.1.0"
edition = "2021"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]

这个文件是TOML(Tom’s Obvious, Minimal Language)格式的,是Cargo配置文件的格式。

第一行[package]是一个section的标题,表示下面定义的内容是在配置一个package。随着内容的增加,我们以后会添加其它的sections。

下面的3行定义了Cargo在编译程序时需要的配置信息:名称(name),版本号(version),要使用的Rust的版本(edition)。

在Rust中,包(packages)被称为“crates”。最后一行[dependencies],就是用来列举工程中使用的依赖(“crates”)的section。在[dependencies]这个section中,你告诉Cargo你的项目需要使用/依赖于什么外部crates,这些crates的版本号是什么。

Cargo.toml中,header下面的所有内容都属于header代表的section,直到另一个section出现。

4. 构建和运行Cargo工程

src路径下,Cargo为我们生成了一个Hello world程序:main.rs,与我们自己创建的main.rs不同的是,Cargo将它放在src文件夹下,并且在工程路径的最上层创建了Cargo.toml

Cargo默认你的源文件都被放在src路径下,工程路径的最上层会放置:

  • README文件
  • license
  • 配置文件(Cargo.toml等)
  • 其它任何与代码不相关的文件

4.1. 构建Cargo工程 - cargo build

4.1.1. cargo bulid

1
cargo build

这个命令会在路径target/debug/下创建一个可执行文件hello_cargo(如果是Windows系统,创建的是hello_cargo.exe)。

运行可执行文件:

1
./target/debug/hello_cargo  # Windows上执行:.\target\debug\hello_cargo.exe

执行后会看到Terminal上打印出”Hello, world!”,如下图所示:
cargo构建和运行程序

第一次运行cargo build时会生成Cargo.lock文件,这个文件会跟踪项目中依赖的确切版本。你不需要手动修改这个文件,Cargo会为你管理这个文件的内容。

4.1.2. cargo build –release

如果你的项目准备好发行了,可以使用

1
cargo build --release

来编译它,并会对它进行优化。这个命令会在target/release下生成可执行文件(而不是target/debug)。

优化会使你的项目运行得更快,但编译的时间会延长。

4.2. 运行Cargo工程 - cargo run

可以使用cargo run来编译并运行项目:

1
cargo run

可以看到这次没有出现Compiling hello_cargo的提示,这是因为Cargo发现文件没有改变,所以直接运行了生成的二进制文件。如果你修改了源代码,Cargo就会重新构建项目,然后才运行它:
cargo run运行结果

4.3. 检查是否可编译 - cargo check

cargo check会快速地检查你的代码是否可编译,但不会生成可执行文件:

1
cargo check

由于不会生成可执行文件,cargo check要比cargo build快很多。

5. 命令总结

  • cargo new:创建新项目
  • cargo build:构建项目并生成可执行文件
    • 可执行文件位置:target/debug/
  • cargo run:构建并运行项目
  • cargo check:只构建项目

参考资料

[1] The Rust Programming Language:https://doc.rust-lang.org/stable/book/ch01-03-hello-cargo.html