Hello, Cargo!
介绍
当我们通过官方推荐的方式安装rust
之后,也会同时安装好Cargo
。
Cargo
是 Rust 的构建系统和包管理器,类似于Npm
。通过Cargo
可以管理项目、构建代码、下载依赖并且编译文件。
Rust中,把代码中所需要的库叫做依赖(dependencies)。
可以通过下面的命令来检测Cargo
是否安装成功。
cargo --version
使用Cargo创建项目
接下来通过Cargo
来创建一个初始项目。
打开终端,执行下面的命令:
cargo new hello-cargo
cd hello-cargo
进入到hello-cargo
目录,包含下面的文件:
|-Cargo.toml
|-src
|-- main.rs
打开Cargo.toml
,内容如下:
[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)标题,表明下面的语句用来配置一个包。随着我们在这个文件增加更多的信息,还将增加其他片段(section)。
接下来的三行设置了 Cargo 编译程序所需的配置:项目的名称、项目的版本以及要使用的 Rust 版本。
最后一行,[dependencies]
,是罗列项目依赖的片段的开始。在 Rust 中,代码包被称为 crates。这个项目并不需要其他的 crate。
打开src/main.rs
文件,代码如下:
fn main() {
println!("Hello, world!");
}
上面的代码和上一篇文章中举的例子代码相同。
Cargo 期望源文件存放在 src 目录中。项目根目录只存放 README、license 信息、配置文件和其他跟代码无关的文件。使用 Cargo 帮助你保持项目干净整洁,一切井井有条。
如果没有使用 Cargo 开始项目,比如我们创建的 Hello,world! 项目,可以将其转化为一个 Cargo 项目。将代码放入 src 目录,并创建一个合适的 Cargo.toml 文件。
构建项目
通过下面的命令来构建项目:
cargo build
执行完该命令后,生成的内容如下:
|-hello-cargo
|-- Cargo.lock
|-- Cargo.toml
|-- src
|----main.rs
|--target
|---- CACHEDIR.TAG
|---- debug
|------build
|------examples
|------hello-cargo.d
|------deps
|------hello-cargo
|------incremental
首先,该命令会创建一个可执行文件,./target/debug/hello-cargo
。
执行下面的命令:
./target/debug/hello-cargo
输出:
hello,world!
首次运行cargo build
命令,会创建出Cargo.lock
文件。这个文件记录项目依赖的实际版本。这个项目并没有依赖,所以其内容比较少。你自己永远也不需要碰这个文件,让 Cargo 处理它就行了。
我们刚刚使用 cargo build
构建了项目,并使用 ./target/debug/hello-cargo
运行了程序,也可以使用 cargo run
在一个命令中同时编译并运行生成的可执行文件:
注意这一次并没有出现表明 Cargo
正在编译 hello-cargo
的输出。Cargo
发现文件并没有被改变,就直接运行了二进制文件。如果修改了源文件的话,Cargo
会在运行之前重新构建项目,并会出现像这样的输出:
cargo run
Compiling hello_cargo v0.1.0 (file:///projects/hello_cargo)
Finished dev [unoptimized + debuginfo] target(s) in 0.33 secs
Running `target/debug/hello_cargo`
Hello, world!
Cargo
还提供了一个叫 cargo check
的命令。该命令快速检查代码确保其可以编译,但并不产生可执行文件:
为什么你会不需要可执行文件呢?通常 cargo check
要比 cargo build
快得多,因为它省略了生成可执行文件的步骤。如果你在编写代码时持续的进行检查,cargo check
会加速开发!为此很多 Rustaceans
编写代码时定期运行 cargo check
确保它们可以编译。当准备好使用可执行文件时才运行 cargo build
。
Cargo 的命令并不会区分操作系统。
发布(release)构建
可以使用 cargo build --release
来优化编译项目。
这会在 target/release
而不是 target/debug
下生成可执行文件。这些优化可以让 Rust
代码运行的更快,不过启用这些优化也需要消耗更长的编译时间。这也就是为什么会有两种不同的配置:一种是为了开发,你需要经常快速重新构建;另一种是为用户构建最终程序,它们不会经常重新构建,并且希望程序运行得越快越好。如果你在测试代码的运行时间,请确保运行 cargo build --release
并使用 target/release
下的可执行文件进行测试。
新项目的构建
git clone example.org/someproject
cd someproject
cargo build