你好cargo
Cargo是Rust的构建系统和包管理器。大多数Rustaceans(Rust程序员)使用Cargo去管理他们的Rust工程,因为Cargo可以为你处理很多工作。比如构建你的代码,下项目依赖库(源码)并且编译这些库。(这些库在项目中需要被调用)
最简单的Rust程序,比如我们前面写的HelloWorld不需要任何依赖。正如我们用Cargo构建Helloword工程时,项目只用了部分Cargo工能来构建你的代码。如果你编写更加复杂的代码,你需要添加依赖(Dependencies)。如果用Cargo开始项目,添加依赖将非常容易。
由于大量的项目都在使用Cargo,本书剩下部分假设你也使用Cargo。如果你使用官方的安装程序安装,Cargo会随Rust一道安装。如果你通过其他方式安装Rust,请输入以下命令检查是否安装了Cargo:
$ cargo --version
如果你看到版本号,证明你有Cargo,如果你看到了错误,如:“command not found",请查看你安装方法的文档确定怎样独立安装cargo
使用cargo创建一个项目
让我们使用cargo创建一个项目,并研究这个项目与我们原如的"Helloworld"项目的不同点。回到你的工程路径(你可以将代码存储到任意地方)。然后打开Shell 运行以下命令:
$ cargo new hello_cargo
$ cd hello_cargo
第一个命令创建一个路径且项目名字叫hello_cargo。我们已经将项目命名为hello_cargo,然后Cargo在这个路径下创建它的文件。
进入hello_cargo路径查看文件。你将看到Cargo已经为我们产生两个文件和一个路径:Cargo。toml文件和src路径,并在src路径中创建了main.rs文件
同时也初始化了git 代码仓库文件.gitignore。如果在一个现存的Git仓库中使用cargo new命令不会创建git相关文件;你可以使用cargo new --vcs=git覆盖这些默认行为。
注意:Git 是一个通用的版本控制系统。改变cargo new命令让你使用不同的版本控制系统或者不使用版本控制系统,只要使用--vcs参数。更多详细信息可以用cargo new --help查看帮助。
在你选择的文本编辑器中打开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格式,这是Cargo配置文件的格式。第一行配置,[package],是一节的头用来说明下面的项是对包的配置。因为我们将添更多的信息到这个文件,我们也将添加其他的配置节。下面的三行设定了Cargo编译你的代码需要的配置信息:name,version和使用Rust的版本。我们在附件E中会讨论edition这个键。
最后一行,[dependencies],是你项目依赖包配置节的开始。在Rust中,对代码库的引用称这为crates。这个项目不需任何crates,但是在第二章的第一个项目中(guess number) 我们使用了dependencies配置节。
现在打开src/main.rs看一下
fn main() {
println!("Hello, world!");
}
Catgo已经为我们创建了Helloworld程序。下如我们前面写的Helloworld。在我们手动创建项目与Cargo创建项目的不同是Cargo将代码放在了src路径下。并在项目路径下有一个Cargo.toml配置文件。
Cargo使用src路径作为源代码路径。在项目根路径下只有README文件,许可证信息,配置文件,和其他与代码不相关的东西。使用Crago将帮助你组织项目文件,将该有的文件放在该放的地方。
如果你开始项目没有使用Cargo,如我们前面写的HelloWorld项目,你可以将此项目转成Cargo管理的项目。只要将代码移动到src路径和创建一个Cargo.toml文件。
构建和运行你的Cargo工程
现在让我看一下用Cargo构建和运行Rust程序的特点,在你的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(或者target/debug/hello_cargo.exe windows操作系统)创建可执行文件而不是你的当前路径。因为默认的构建是调试构建,Cargo会将二进制可执行程序放入叫debug的路径中。你可用下面命令运行:
$ ./target/debug/hello_cargo # or .\target\debug\hello_cargo.exe on Windows
Hello, world!
如果一切正常,Hello World 应该会打印到终端上。第一次运行cargo build命令,cargo会在项目根路径中创建Cargo.lock文件。这个文件跟踪了项目中依赖包的确切版本。由于本项目没有依赖,所以文件内容较少。你从不需要手动修改此文件,Cargo为你管理此文件内容。
我们刚刚用cargo build命令和./target/debug/hello_cargo命令构建和运行了项目。但是我们也可以用cargo run命令去编译并且随后运行产生的可执行文件:
$ cargo run
Finished dev [unoptimized + debuginfo] target(s) in 0.0 secs
Running `target/debug/hello_cargo`
Hello, world!
使用cargo run比记信使用cargo build 然后用完程路径运行二进制可执行文件方便,所以大多数开发者使用cargo run命令。
注意:此时我们不能看到Cargo正在编译的输出,因为Cargo认为你的文件没有修改,所以Cargoi 不会是重新构建成可执行文件。如果你修改了源代码文件,cargo run将会在运行前重新编译。你将看到以下输出:
$ 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跳过了创建执行包这一步。在编程中,你可以持续检查你的代码保证正确性,用cargo check将加速你的编码过程。大多数Rust程序员周期性的运行cargo check命令检查代码确保可以编译通过。只有在他们想运行时才去使用cargo build命令生成可执行文件。
让我们回顾关于Cargo的知识
- 用cargo new 创建一个项目
- 用cargo build构建一个项目
- 用cargo run 运行一个项目
- 用cargo check栓查代码是否可通过编译
- Cargo会将Debug可执行文件放入target/debug路径中
使用Cargo的另外好处是,Cargo的命令在任何操作系统上都是一样的,我们不需要为特定的操作系统使用不同的命令。(方便记忆,方便使用)
发行版构建
当你的程序最终完成准备发行时,你可以使用cargo build --release 命令进行优化编译。此命令会在target/release路径下创建可执行包而不是在target/debug路径下。优化让你的Rust代码运行的更快,但是编译时会花费更长的时间。这就是为什么要区分debug和release两种环境:debug是为了开发环境,debug环境可以快速构建;release将构建最终运行更快的生产包。如果你想基准化(限定)你的代码运行时间,确定使用cargo build --release进行编译,同时使用target/release路径下的可执行包运行时间作为基准。
Cargo作为习习惯
对于简单的项目,Cargo不会提供比使用rustc更多的价值,但随着您的程序变得更加复杂,它将证明它的价值。一旦程序扩展到多个文件或需要依赖项,让Cargo协调构建就容易多了。
尽管hello_cargo项目很简单,但它现在使用了许多您在Rust职业生涯中使用的真正工具。事实上,要处理任何现有项目,您可以使用以下命令使用Git签出代码,更改到该项目的目录,然后构建:
$ git clone example.org/someproject
$ cd someproject
$ cargo build
更多信息可以查看Catgo文档 its documentation.
总结
您的Rust之旅已经开始了!在本章中,您学习了如何:
- 使用rustup安装最新稳定版本的Rust
- 更新到更新的Rust版本
- 打开本地安装的文档
- 编写并运行“Hello world!”直接使用rustc的程序
- 使用Cargo的创建并运行新项目
现在是构建一个更丰富的程序以习惯阅读和编写Rust代码的好时机。因此,在第2章中,我们将构建一个猜谜游戏程序。如果您希望从学习Rust中常见的编程概念如何工作开始,请参阅第3章,然后返回第2章。