Cargo
使用基础
Tips:
本文是阅读《Rust程序设计语言》1.3章的总结与思考。
Cargo
简介
Cargo
是 Rust
的构建系统和包管理器。
关系:
- 可以没有
Cargo
- 有
Cargo
更方便,不需要让我们花时间在,构建代码,下载依赖库,编译依赖库等繁琐的事务上面- 官方提供的教程,会自带
Cargo
安装- 类比于
Java
的Maven
,gradle
,Ant
或C++
的CMake
检查 Cargo
版本指令
cargo --version
使用Cargo
创建项目
Tips:
Cargo
有一个优点,不管用什么操作系统,命令都是一样的,所以我们不需要区分Linux
、macOS
或Windows
提供平台特定的命令
请在 projects
目录下(你放代码的目录下,不一定叫projects
),执行创建新项目指令
cargo new hello_cargo
cd hello_cargo
ls
-
第一行命令新建了名为
hello_cargo
的目录。我们将项目命名为hello_cargo
,同时Cargo
在一个同名目录中创建项目文件。 -
进入
hello_cargo
目录并列出文件。将会看到Cargo
生成了两个文件和一个目录:一个Cargo.toml
文件,一个src
目录,以及位于src
目录中的main.rs
文件。 -
它也在
hello_cargo
目录初始化了一个Git
仓库,并带有一个.gitignore
文件。如果在现有的Git
仓库中运行cargo new
,则不会生成 Git 文件;但你可以使用cargo new --vcs=git
来无视此限制,强制生成Git
文件。
关键点
- 只有
src
目录下Cargo
希望你存放源代码文件- 项目根目录只放说明文件
README
,许可协议(license
)信息、配置文件和其他跟代码无关的文件。Cargo.toml
是配置文件,类似于pom.xml
,里面有项目的依赖,名称、版本,以及使用的Rust
大版本号(edition
,区别于version
)。
构建并运行Cargo
项目
在 hello_cargo
目录下,输入下面的命令来构建项目:
$ cargo build
Compiling hello_cargo v0.1.0 (file:///projects/hello_cargo)
Finished dev [unoptimized + debuginfo] target(s) in 2.85 secs
这个命令会在 target/debug/hello_cargo
下创建一个可执行文件(在 Windows
上是 target\debug\hello_cargo.exe
),而不是放在目前目录下。你可以使用下面的命令来运行它:
$ ./target/debug/hello_cargo # 或者在 Windows 下为 .\target\debug\hello_cargo.exe
Hello, world!
我们也可以使用 cargo run
命令,一次性完成代码编译和运行的操作:
$ cargo run
Finished dev [unoptimized + debuginfo] target(s) in 0.0 secs
Running `target/debug/hello_cargo`
Hello, world!
注意这一次并没有出现表明 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
Checking hello_cargo v0.1.0 (file:///projects/hello_cargo)
Finished dev [unoptimized + debuginfo] target(s) in 0.32 secs
为什么你会不需要可执行文件呢?通常,cargo check
要比 cargo build
快得多,因为它省略了生成可执行文件的步骤。如果你在编写代码时不断检查你的代码,那么使用 cargo check
命令可以加快这个过程!为此很多 Rustacean 编写代码时会定期运行 cargo check
以确保它们可以编译。当准备好使用可执行文件时才运行 cargo build
。
关键:
cargo run
是编译并运行cargo build
是构建项目cargo check
是检查代码确保可以编译(不产生可执行文件,速度快)- 编写代码时可能经常需要检查代码可以使用
cargo check
- 构建的目录不在
src
目录下,项目根目录的/target/debug
或/target/release
下
发布构建项目
可以使用指令 cargo build --release
来优化编译项目。这会在 target/release
而不是 target/debug
下生成可执行文件。这些优化可以让 Rust
代码运行的更快,不过启用这些优化也需要消耗更长的编译时间。这也就是为什么会有两种不同的配置:一种是为了开发,你需要经常快速重新构建;另一种是为用户构建最终程序,它们不会经常重新构建,并且希望程序运行得越快越好。如果你要对代码运行时间进行基准测试,请确保运行 cargo build --release
并使用 target/release
下的可执行文件进行测试。
关键:
- 可以构建
debug
版项目和release
版项目debug
版项目和release
版项目存放的路径不同- 两种不同版本构建项目各有优势,开发用
debug
,发布用release
最后
请把 rust
项目使用 cargo
当成一种习惯。
Tips:
对于简单项目而言,使用Cargo
和直接使用rustc
相比并没有太大的优势,但是在程序变得更加复杂时,它会证明自己的价值。对于拥有多个crate
的复杂项目,交给Cargo
来协调构建将简单得多。