写点什么

Rust 入门指南(crate 管理)

作者:王泰
  • 2022 年 7 月 28 日
  • 本文字数:1907 字

    阅读完需:约 6 分钟

本文为「Rust 入门指南」系列的第二部分。 这篇文章将重点介绍 cargo cli 工具和 Rust 的包管理系统,包括:

本文主要介绍 cargo 命令行和 Rust 的包管理系统,包括

  • 搜索 crates

  • 在项目中使用 crates

  • 配置 crate

  • 安装 / 使用 cargo-watch

Rust 的基础知识可以参考上一篇内容 Rust — 入门指南(rustup, cargo)

可以使用 https://geekcode.cloud 云开发环境一键创建 rust 环境快速开始后面的内容。

接下来的内容默认你已经读过上一篇的内容,并在 https://geekcode.cloud 体验了 rustc 和 rustup

Crates

crates 就是 Rust 包 生成的 crates 注册在 crates.io 仓库上,我们可以在 crates.io 找到全部的 crates。

使用 cargo 命令搜索 crate。 例如,要搜索与 sql 相关的 crates :

$ cargo search sql

search 命令的结果显示与相关的 crate 名称和版本号:

使用 Crates

把需要的 crates 添加到 Cargo.toml 文件中。

使用$ cargo new {project_name} 创建出的 Cargo.toml 内容:

[package]name = "hello_world"version = "0.1.0"edition = "2022"# See more keys and their definitions athttps://doc.rust-lang.org/cargo/reference/manifest.html[dependencies]
复制代码

编辑 Cargo.toml 文件,添加上面搜索到的 sql create:

[package]name = "hello_world"version = "0.1.0"edition = "2018"# See more keys and their definitions athttps://doc.rust-lang.org/cargo/reference/manifest.html[dependencies]sql = "0.4.3"           <-- Add dependency here
复制代码

注意,Cargo 依赖项与 SemVer 语法完全兼容,允许按需选择性更新。

Crates、Git 和 Feature toggles

Cargo 有很强大的功能获得 crates 。可以使用不同的方式指定 crate 。

标准方式:

[dependencies]bracket-lib = “~0.8.1”
复制代码

指定 Git 仓库:

[dependencies]bracket-lib ={ git = "https://github.com/thebracket/bracket-lib" }
复制代码

使用 feature toggles ,在下面的示例中,使用 bracket-lib ,但禁用默认渲染引擎并使用 vulkan 引擎 -

[dependencies]bracket-lib = {  git = "https://github.com/thebracket/bracket-lib",  default-features = false,  features = [ "amethyst_engine_vulkan" ]}
复制代码

源(Source)和二进制 Crates

C# 或 NPM 工程师,会注意到在添加 crate 后运行$ cargo build 时控制台输出:

Compiling sql v0.4.3Compiling hello_world v0.1.0 (/Users/gian/hello_world)    Finished dev [unoptimized + debuginfo] target(s) in 0.99s
复制代码

大多数 Rust crate 都是基于源码的,添加到本地项目时,cargo 会自动获取源代码,然后在平台编译 crate。

如果指定不同的 target 平台,cargo 会重新编译所有 crate。

Cargo 支持安装 binary crates,特定于 crates 是可执行文件。 所以 cargo 获取、编译然后安装生成的可执行文件。

要安装二进制 crate,您可以直接使用 cargo:

$ cargo install {crate_name}

注意:使用 cargo install 仅支持二进制 crate。 不能使用此命令来安装/添加常规 crate。

请看下面 cargo-watch 的示例。

Cargo-watch

对于大多数 crate,可以将它们直接添加到 Cargo.toml。 首先使用 cargo search 命令查找最新版本,或直接访问 crates.io,但不能使用 cargo install

但是,如果安装的 crate 是二进制 crate,那么只能使用 cargo install 即可获取、编译和安装 crate 以供您使用。

注意: 与其他 crate 不同,安装二进制 crate 只需执行一次(除非需要更新二进制 crate 的版本)。

Updating crates.io indexIgnored package `cargo-watch v7.8.1` is already installed, use --force to override
复制代码

cargo-watch 用于监控项目中的文件变化并运行命令。

安装 cargo-watch :

$ cargo install cargo-watch

安装完成后,可以立即能够访问 cargo-watch 工具:

$ cargo-watch -x build

此命令将启动一个进程来监视项目中文件的更改,在这种情况下,当检测到更改时会自动运行cargo build

您可以像这样将多个命令链接在一起 -

$ cargo-watch -x fmt -x test

如果您已安装了 Rust linter,但它会触发 linter,然后运行任何每次文件更改时测试!

您可以使用 cargo-watch 做更多事情,因此请查看 cargo-watch crate 文档。

总结

Rust crates 与大多数其他包装系统没有特别的不同,但如上所述,需要注意的事情很少。

cargo-watch crate 是二进制 crate 的例子,也是一个非常方便的实用程序,当您在 VSCode 中进行开发并希望对代码更改等进行即时反馈时。

还有很多有用的 crates 在crates.io 上。

keep rusty!

发布于: 14 小时前阅读数: 10
用户头像

王泰

关注

还未添加个人签名 2011.07.21 加入

GeekCode.Cloud 创始人

评论

发布
暂无评论
Rust 入门指南(crate 管理)_rust_王泰_InfoQ写作社区