Rust-Cargo是什么

  Cargo是Rust的构建系统和包管理器。大多数Rustacean们使用Cargo来管理他们的Rust项目,因为它可以为你处理很多任务,比如构建代码、下载依赖库并编译这些库。(我们把代码所需要的库叫做依赖 dependencies)。(学习)

基本结构

  当我们使用Intellij创建一个新项目,名字是HelloWorld,项目结构如下:

 Cargo.toml和Cargo.lock文件总是位于项目根目录下。

源代码位于src目录下;

默认的库入口文件是src/lib.rs;

默认的可执行程序入口文件是src/main.rs;

其它可选的可执行文件位于src/bin/*.rs(这里每一个rs文件均对应一个可执行文件);

外部测试源代码文件们于tests目录下;

外部测试源代码文件位于tests目录下;

Cargo.toml和Cargo.lock

  Cargo.toml和Cargo.lock是cargo项目代码管理的核心两个文件,cargo工具的所有活动均基于这两个文件。

  Cargo.toml是cargo特有的项目数据描述文件,对于开发人员而言,Cargo.toml文件存储了项目的所有信息,它直接面向开发人员,开发人员如果想让自已的rust项目能够按期望的方式进行构建、测试和运行,那么必顺按照合理的方式构建Cargo.toml。

  以下是Cargo.toml的内容

[package]
name = "HelloWorld"
version = "0.1.0"
authors = ["johnnyzhao <minj2me@gmail.com>"]
edition = "2018"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]

[[test]]
name = "test1"
path = "tests/test1.rs"

   而Cargo.lock文件,开发人员不需要直接去修改这个文件。lock文件是cargo工具根据同一项目的toml文件生成的项目依赖详细清单文件,所以我们一般不用修改他,只需要对着Cargo.toml文件进行开发就好了。

[package]段落描述了软件开发者对本项目的各种元数据描述信息,name字段定义了项目的名称,version字段定义了项目的当前版本,authors字段定义了该项目的所有者(作者),当然,[package]段落不仅仅包含这些字段,更详细的可选字希详见Cargo参数配置

  以下是Cargo.lock的内容

# This file is automatically @generated by Cargo.
# It is not intended for manual editing.
[[package]]
name = "HelloWorld"
version = "0.1.0"

定义项目依赖

  使用cargo工具的最大优势就在于能够对该项目的各种依赖项进行方便、统一和灵活的管理。这也是使用cargo对rust的项目进行管理的重要目标之一。在cargo的toml文件描述中 ,主要通过各种依赖段落来描述该项目的各种依赖项。toml中常用的依赖段落包括以下几种:

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

如:

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

2-4行,为方法一的写法;

第5行,为方法二的写法;

第6行,为方法三的写法;

这三种写法各有用处,如果项目需要使用crates.io官方仓库来管理项目依赖项,推荐使用第一种方法。如果项目开发者更倾向于使用git仓库中最新的源码,可以使用方法二。方法二也经常用于当官方仓库的依赖项编译不通过时的备选方案。方法三主要用于源代码位于本地的依赖项。

定义集成测试用例

  cargo另一个重要的功能,即将软件开发过程中必要且非常重要的测试环节进行集成,并通过代码属性声明或者toml文件描述来对测试进行管理。其中,单元测试主要通过在项目代码的测试代码部分前用 #[test] 属性来描述,而集成测试,则一般都会通过toml文件中的[[test]]段落进行描述。例如,假设集成测试文件均位于tests文件夹下,toml可以写成这样:

[[test]]
name = "test1"
path = "tests/test1.rs"

  name字段定义了集成测试的名称,path字段定义了集成测试文件相对于本toml文件的路经。看看,定义集成测试就是如此简单。但需要注意的是:

  • 如果没有在Cargo.toml里定义集成测试的入口,那么tests目录(不包括子目录)下的每个rs文件被当作集成测试入口。
  • 如果在Cargo.toml里定义了集成测试入口,那么定义的那些rs就是入口,不再默认指定任何集成测试入口。
原文地址:https://www.cnblogs.com/johnnyzhao/p/14435462.html