Rust能力养成之(11):用Cargo进行项目管理:详谈Cargo.toml

图片

前言

 

上一篇讲了

  • 子命令定制与安装

  • 用 Clippy来 Linting 代码

 

本篇会涉及

  • 详谈Cargo.toml

  • 用VSCode建立Rust开发环境

 

详谈Cargo.toml

 

应该说,Cargo严重依赖于相应的项目清单文件Cargo.toml来获取所有的项目信息。虽然之前对该文件介绍了一下,但还没有深入,这里我们仔细看一下这个文件以及其所包含的内容。

如之前已知,使用 crate new projectname 这个命令,可以得到一个默认的项目清单文件,内含一些能够使项目得以构建的必要信息。每个清单文件都可被划分为指定项目的不同属性的部分。以下我们看一个实例,来自一个较大型项目级别的清单文件。

 

如下所示:​​

# cargo_manifest_example/Cargo.toml# We can write comments with `#` within a manifest file
[package]name = "cargo-metadata-example"version = "1.2.3"description = "An example of Cargo metadata"documentation = "https://docs.rs/dummy_crate"license = "MIT"readme = "README.md"keywords = ["example", "cargo", "mastering"]authors = ["Jack Daniels <jack@danie.ls>", "Iddie Ezzard <iddie@ezzy>"]build = "build.rs"edition = "2018"
[package.metadata.settings]default-data-path = "/var/lib/example"
[features]default=["mysql"]
[build-dependencies]syntex = "^0.58"
[dependencies]serde = "1.0"serde_json = "1.0"time = { git = "https://github.com/rust-lang/time", branch = "master" }mysql = { version = "1.2", optional = true }sqlite = { version = "2.5", optional = true }

这里我们过一下这个清单文件,在[package]中

  • name:项目名称

  • version:项目版本

  • 描述description:关于项目目的,方向等内容的基本描述

  • 许可license:软件许可标识符,如http://spdx.org/licenses/所示者

  • readme:提供链接到项目存储库中的文件,这里就是一个项目介绍的入口

  • documentation文档:如果是一个库的crate,则包含到该crate文档的链接

  • keywords关键字:是若干单词的列表,用过通过搜索引擎或crate.io可以找到对应的项目

  • authors作者: 列出项目的主要作者

  • build构建:定义一段Rust代码(通常是build.rs),以在程序的其余部分编译之前先编译并运行,通常用于生成代码或构建crate所依赖的本机库。

  • edition(Rust编译版本):该条目指定编译项目时使用的版本。就现在而言,使用的是2018版,之前的还存在过一个2015版本,如果没有该条目,将被假定为默认版本。而使用2018版创建的项目是向后兼容的,这意味着也可以使用2015年的crate作为依赖项。

 

接着是[package.metadata.settings]部分。 

一般而言,bnmCargo会要求各个区块条目要有必要信息,而且最好是清晰的信息,而对于metadata元数据,就没那么严格,通常会忽略。因此,在这个部分,开发者可以定义,配置各种键值对或其他的对应关系。

这里将[features],[dependencies]和[build-dependencies]这三个一起介绍。

依赖关系可以通过版本号来声明,采用的是SemVer的格式:

图片

上图表明serde 是一个必须的依赖项,而且需要的最新版本是1.0.*, 而实际的版本信息则会固化在Cargo.lock文件中。

使用插入(caret)符号用来扩大Cargo允许查找的版本范围:

图片

上图表明,需要的最新主版本是0.*.*,但必须至少是0.58.*

Cargo允许直接指定与Git存储库的依赖关系,当然前提是存储库是由Cargo创建的项目,并遵循Cargo所期望的目录结构。

 

如下图所示,可以像这样在GitHub上指定依赖项:

图片

这也适用于其他在线Git仓库,比如GitLab。同样,实际的版本(或者在Git的情况下,更改集修订)将固化在固化在Cargo.lock文件中。

如下图所示,该清单文件还有两个依赖项,注意一下optional = true,这意味着程序可以在不依赖这两者的情况下得以构建。

图片

[features]包含了一列默认信息。

图片

这意味着,如果在构建程序时不手动覆盖修改特征信息,则只会引入mysql,而不会引入sqlite。

一个用例是当你的库需要某种程度的优化调整:有相关背景的读者想必知道,在嵌入式平台上,这种做法是非常消耗资源的,因此库作者可以之将其作为特定功能写入和发布,而这些功能只在有能力的系统上可用。

另一个例子是在构建命令行应用程序时,可以再提供一个GUI前端作为备选。

至此,关于如何使用Cargo.toml清单文件描述Cargo项目的简单介绍已经完成。当然,事关如何用Cargo配置项目,还有很多需要探索的内容。

 

有余力的读者可以查看

https://doc.rust-lang.org/cargo/reference/manifest.html

获取更多信息

 

用VSCode建立Rust开发环境

 

这方面的内容,在第一篇已经提及,这里再稍微补充几句。首先说 vim, Emacs, intellij IDE, Sublime, Atom这些IDE,都可以使用。

但相对而言Visual Studio Code(vscode)更加成熟,安装起来也更加轻便,而且对Rust有更加针对性的支持,在vscode中, Rust社区有一个名为rls-vscode的扩展,很为强大,它使用了许多我们之前在列出的各种工具,如下图所示。

写到这里,要搭建相应的开发环境,两件事可做:第一,安装vscode,第二安装Rust插件

图片

图片

 

结语

 

本篇依然是打基础,下一篇开始,讲一个操作实例

 

 

主要参考和建议读者进一步阅读的文献

https://doc.rust-lang.org/book

1.Rust编程之道,2019, 张汉东

2.The Complete Rust Programming Reference Guide,2019, Rahul Sharma,Vesa Kaihlavirta,Claus Matzinger

3.Hands-On Data Structures and Algorithms with Rust,2018,Claus Matzinger

4.Beginning Rust ,2018,Carlo Milanesi

5.Rust Cookbook,2017,Vigneshwer Dhinakaran

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值