Rust 编程 (三)cargo应用

你好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章。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值