从零开始DeRust学习(Day2)

Cargo是Rust语言的包管理工具,它帮助管理和构建项目,包括创建项目结构、编译与运行代码、管理依赖。cargobuild用于编译,cargorun则整合了编译和运行。Cargo.toml和Cargo.lock是核心文件,前者定义项目配置,后者记录依赖的具体版本,保证构建的可重复性。cargoupdate可以更新依赖至最新版本,而cargocheck用于快速检查代码的编译性。
摘要由CSDN通过智能技术生成

认识Cargo

众所周知,nodejs 的npm 包管理工具是很方便的,但如果你是C系玩家,肯定会遇到包管理的问题。

包管理工具最重要的意义就是任何用户拿到你的代码,都能运行起来,而不会因为各种包版本问题而焦头烂额。

作为一门现在化语言,Rust 吸收了多个语言的包管理优点,为大家提供超级大杀器: cargo

创建“Hello world”

认识第一个cargo 命令: cargo new hello_world

$ cargo new hello_world
     Created binary (application) `hello_world` package
$ cd hello_world

会发现多了一个名为“hello_world”的文件夹,其项目结构为:

$ tree
.
├── .git
├── .gitignore
├── Cargo.toml
└── src
    └── main.rs

连git都有,amazing!

上面的命令使用cargo new创建一个项目,项目名为hello_world。该项目的结构和配置文件都是由cargo生成的,这意味着 我们的项目被cargo所接管了

编译与运行

编译

$ cargo build
   Compiling hello_world v0.1.0 (D:\rust_learn\hello_world)
    Finished dev [unoptimized + debuginfo] target(s) in 1.18s

这是会看到在 hello_world 文件中多了一个 target 目录。可执行文件就在里面。

运行

$ .\target\debug\hello_world.exe
Hello, world!

注:在Window中会生成 .exe结尾的可执行文件,在Linux 或 Mac 中就是同名的可执行文件。

行云流水,但是谈不上一气呵成。如果每次都要输入这么长一串指令来运行也太麻烦了。这时Rust提供了 cargo run 来一体化编译和运行。

$ cargo run
    Finished dev [unoptimized + debuginfo] target(s) in 0.00s
     Running `target\debug\hello_world.exe`
Hello, world!

cargo run相当于运行上面两个程序。

当我们去寻找可执行文件的时候,会发现怎么在debug目录下。其实我们运行的就是debug模式,在这种模式下,代码的编译速度会非常快,但是运行速度慢了 。原因是,在debug模式下,Rust编译器不会做任何优化,只为了尽快的编译完成,让你的开发流程更流畅。

如果说咱们的目的是为了追求更高的性能,那我们可以在命令后面添加 --release来编译

  • cargo run --release
  • cargo build --release

试着运行一下我们高性能的 release 程序:

$ ./target/release/world_hello
Hello, world!

快速检测

当项目大了后,cargo run 和 cargo build 不可避免的会变慢。那我们就需要一个更加快速的方式开验证代码是否能通过编译。

cargo check :快速的检查一下代码能否编译通过。因此该命令速度会非常快,能节省大量的编译时间。

$ cargo check
    Checking hello_world v0.1.0 (D:\rust_learn\hello_world)
    Finished dev [unoptimized + debuginfo] target(s) in 0.09s

核心文件

Cargo.tomlCargo.lockcargo 的核心文件,它的所有活动均基于此二者。

  • Cargo.tomlcargo 特有的项目数据描述文件。它存储了项目的所有元配置信息,如果 Rust 开发者希望 Rust 项目能够按照期望的方式进行构建、测试和运行,那么,必须按照合理的方式构建 Cargo.toml
  • Cargo.lock 文件是 cargo 工具根据同一项目的 toml 文件生成的项目依赖详细清单,因此我们一般不用修改它,只需要对着 Cargo.toml 文件撸就行了。

Cargo.lock确保文件构建是可以重现的,Cargo只会使用你指定的依赖版本,除非你手动将依赖升级。

可以使用cargo update命令,它会忽略 Cargo.lock 文件,并计算出所有符合 Cargo.toml 声明的最新版本。Cargo 接下来会把这些版本写入 Cargo.lock 文件。

当然你也可以手动去Cargo.toml中选择需要的版本,重新编译即可。

打开Cargo.toml ,它应该看起来长这个样子:

[package]
name = "hello_cargo"
version = "0.1.0"
edition = "2021"

[dependencies]

此文件使用 TOML (Tom’s Obvious, Minimal Language) 格式,这是 Cargo 配置文件的格式。

第一行,[package],是一个表块(section)标题,表明下面的语句用来配置一个包(package)。随着我们在这个文件增加更多的信息,还将增加其他表块。

接下来的三行设置了 Cargo 编译程序所需的配置:项目的名称、版本,以及使用的 Rust 大版本号(edition,区别于 version)。

最后一行,[dependencies] 是一个表块的开头,你可以在其中列出你的项目所依赖的任何包。

在 Cargo.toml 中,主要通过各种依赖段落来描述该项目的各种依赖项:

  • 基于 Rust 官方仓库 crates.io,通过版本说明来描述
  • 基于项目源代码的 git 仓库地址,通过 URL 来描述
  • 基于本地项目的绝对路径或者相对路径,通过类 Unix 模式的路径来描述

举例:

[dependencies]
rand = "0.3"
hammer = { version = "0.5.0"}
color = { git = "https://github.com/bjz/color-rs" }
geometry = { path = "crates/geometry" }

第一次对于Cargo的认识就点到为止,相信应该后面还能再相遇。接下去就开始我们的Rust语言之旅了。

本文是在阅读Rust语言圣经 时边学边写,如有不对请指正,感谢!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值