Cargo 是 Rust 的构建系统和包管理工具。大部分“锈粉”(Rustaceans,指 Rust 语言爱好者)用它管理 Rust 项目,因为 Cargo 可以帮你处理很多任务,比如构建代码,下载依赖库,构建依赖库等。
最简单的 Rust 程序不需要任何依赖。当程序越来越复杂,会添加更多的依赖。使用 Cargo 可以更轻松的管理依赖。
使用如下命令检查 Cargo 是否正确安装:
$ cargo --version
使用 Cargo 创建项目
使用 Cargo 创建一个新项目,来感受一下与前面 Hello World 项目的不同。在 projects 目录下,执行如下命令:
$ cargo new hello_cargo
$ cd hello_cargo
第一个命令创建新目录 hello_cargo。进入目录,会发现 Cargo 已创建两个文件:Cargo.toml 文件和 src 目录,目录下有 main.rs 文件。
它还初始化了一个新的 Git 仓库,其中包含 .gitignore 文件。当在已经存在的 Git 仓库下执行 cargo new 时,不会产生 Git 文件;可以使用 cargo new --vcs=git 覆盖这个默认行为。
打开 Cargo.toml,它的内容如下:
[package]
name = "hello_cargo"
version = "0.1.0"
edition = "2021"
[dependencies]
这个配置文件使用了 TOML 格式。
最后一行的 [dependencies],可以列举项目的依赖项。在 Rust 中,代码包称为 crates(板条箱)。
打开 src/main.rs:
fn main() {
println!("Hello, world!");
}
Cargo 期望所有源码位于 src 目录。根目录是用于 README 文件,版权信息,配置文件等与代码无关的内容。
构建运行 Cargo 项目
构建项目使用如下命令:
$ cargo build
这个命令创建可执行文件 target/debug/hello_cargo。使用如下命令执行它:
$ ./target/debug/hello_cargo
Hello, world!
第一次执行 cargo build 时,还会在根目录创建新文件 Cargo.lock。这个文件会追踪依赖库的精确版本。因为当前项目没有依赖,所以里面的内容很少。无需手动修改这个文件,Cargo 会自动管理它的内容。
我们刚刚使用 cargo build 编译项目,并使用 ./target/debug/hello_cargo 运行项目,其实我们还可以使用 cargo run,一条指令实现编译源码和运行程序:
$ cargo run
Cargo 还提供了 cargo check 工具。它快速检查代码,保证它可以成功编译,但是不输出可执行文件。
$ cargo check
为什么不需要可执行文件呢?cargo check 通常比 cargo build 快很多,因为它无需创建可执行文件。如果在编写代码时,时不时检查代码,使用 cargo check 会让整个流程提速。
关于 Cargo 的知识做个小结:
- 使用
cargo build编译项目; - 使用
cargo run编译并运行项目; - 使用
cargo check检查项目状况,不产生二进制文件; - Cargo 把构建结果存放到
target/debug目录;
Cargo 的另一个额外优势在于,无论你的操作系统是什么,命令都是一样的。
发布构建
当你的项目准备发布,使用 cargo build --release 优化编译。这个命令会在 target/release 创建可执行文件。优化让代码执行更快,但会增加编译时间。这也是有两种开发配置的原因:一个用于开发,方便快速编译;一个用于最终发布,不用反复编译,但是执行速度很快。当衡量代码运行速度时,记得使用 cargo build --release 命令。
参考文档
- Hello, Cargo! - Rust