当前位置: 首页 > news >正文

提供秦皇岛网站建设价格南京网站设计

提供秦皇岛网站建设价格,南京网站设计,企业网站建设合同方案,中国外贸论坛喜欢的话别忘了点赞、收藏加关注哦,对接下来的教程有兴趣的可以关注专栏。谢谢喵!(・ω・) 14.4.1. 为什么需要cargo workspace 假如说我们构建了一个二进制crate,里面既有library又有库。随着项目规模不断增长&#…

喜欢的话别忘了点赞、收藏加关注哦,对接下来的教程有兴趣的可以关注专栏。谢谢喵!(=・ω・=)
请添加图片描述

14.4.1. 为什么需要cargo workspace

假如说我们构建了一个二进制crate,里面既有library又有库。随着项目规模不断增长,库crate可能不断变大。在这种情况下通常会把它拆为多个包,针对这种需求,Rust提供了cargo工作空间,也就是cargo workspace。

cargo workspace会帮助管理多个相互关联且需要协同开发的crate。其本质是一套共享同一个Cargo.lock和输出文件的包。

14.4.2. 使用workspace

有多种方式可以创建工作空间(workspace)。

做一个例子,这个工作空间里有1个二进制crate和1个库crate:

  • 二进制crate里有main函数,依赖于库crate
  • 其中一个库crate提供一个叫add_one函数

1. 创建workspace目录

首先为工作空间创建一个目录,我取名叫add,在终端输入:

$ mkdir add
$ cd add

2. 在主项目中使用workspace

接下来,在add目录中,我们创建将配置整个工作区的Cargo.toml文件。该文件不会有[package]部分。相反,它将以[workspace]部分开头:

[workspace]members = ["adder",
]

adder就是我给二进制crate取的名,这个列表可以继续添加。

3. 添加库

$ cargo new adder

通过这个命令创建了adder crate,在目录add/adder

此时整个项目的结构如下:

├── Cargo.lock
├── Cargo.toml
├── adder
│   ├── Cargo.toml
│   └── src
│       └── main.rs
└── target

需要注意的是,这时候我们既可以对add这个项目使用cargo build,也可以对add下的adder库使用cargo bulid。但是生成的target目录和Cargo.lock文件只会有一个,在add目录下,而adder库使用cargo bulid的产出物也会存放在这里。因为各个crate往往是相互依赖的,每个目录都有自己的target就会导致开发者不得不反复编译工作空间里的其余crate。

接下来添加其它crate:

另一个crate叫add_one,修改工作空间信息:

[workspace]members = ["adder","add_one",
]

使用cargo new添加库,记得使用--lib旗帜来把它声明为library crate:

$ cargo new add_one --lib

现在整个项目的结构是:

├── Cargo.lock
├── Cargo.toml
├── add_one
│   ├── Cargo.toml
│   └── src
│       └── lib.rs
├── adder
│   ├── Cargo.toml
│   └── src
│       └── main.rs
└── target

4. 编写代码

add_one/src/lib.rs文件中,我们添加一个add_one函数:

pub fn add_one(x: i32) -> i32 {x + 1
}

现在我们可以让adder包和我们的二进制文件依赖于add_one。首先,我们需要添加路径依赖add_oneadder/Cargo.toml,因为Cargo并不假设工作区中的crate会相互依赖,因此我们需要明确依赖关系。在adder/Cargo.toml中这么写:

[dependencies]
add_one = { path = "../add_one" }

接下来,让我们使用add_one函数(来自add_one crate)。打开adder/src/main.rs文件并在顶部添加use来把add_one引入作用域,将新的add_one库crate纳入范围。然后更改main函数来调用add_one函数。

use add_one;fn main() {let num = 10;println!("Hello, world! {num} plus one is {}!", add_one::add_one(num));
}

5. 编译

add这个项目使用cargo build

$ cargo buildCompiling add_one v0.1.0 (file:///projects/add/add_one)Compiling adder v0.1.0 (file:///projects/add/adder)Finished dev [unoptimized + debuginfo] target(s) in 0.68s

没有报错,正常运行。

6. 测试

我们还可以通过使用-p标志并指定我们要测试的包的名称,从顶级目录中对工作区中的一个特定包运行测试。比如说仅测试add_one函数:

$ cargo test -p add_oneFinished test [unoptimized + debuginfo] target(s) in 0.00sRunning unittests src/lib.rs (target/debug/deps/add_one-b3235fea9a156f74)running 1 test
test tests::it_works ... oktest result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00sDoc-tests add_onerunning 0 teststest result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

如果您将工作区中的 crate 发布到crates.io ,则工作区中的每个 crate 都需要单独发布。与cargo test一样,我们可以使用-p在工作区中发布特定的箱子标记并指定我们要发布的包的名称。

http://www.hengruixuexiao.com/news/96.html

相关文章:

  • asp.net+制作网站开发seo关键字优化教程
  • 软件工程师招聘简章pdf免费整站优化多少钱
  • 绍兴cms建站模板杭州百度快照优化排名推广
  • 网站建设和网站设计百姓网推广电话
  • 做赌博网站违法吗2024年3月份病毒会爆发吗
  • java做兼职找什么网站最新热搜榜
  • 辽阳市城市建设委员会网站营销方案策划
  • 百度站长自动推送wordpress百度手机助手应用商店
  • o2o网站策划企业培训课程
  • 做三年网站需要多少钱济南头条今日新闻
  • 专业的网站制作团队搜索引擎营销的英文缩写
  • 建筑网上接活平台自己怎么优化网站排名
  • 如何把自己做的网站 放在网上百度软件商店
  • 青岛做网站优化公司网络服务主要包括什么
  • 织梦移动网站后缀百度号码认证平台官网首页
  • 政府网站建设 论文做免费推广的平台
  • 做博彩网站代理犯法吗品牌推广网络公司
  • php做用户注册网站怎样设计一个网页
  • 现代感网站社群营销的案例
  • 超全的开源建站系统大全成品网站1688入口的功能介绍
  • 平面设计在哪里学最好优化的定义
  • 团队介绍网站建设青岛做网站推广公司
  • 网络营销导向企业网站建设新乡seo推广
  • 普通企业网站费用推广运营公司哪家好
  • 电子商务英语5g网络优化工程师
  • 宁波网站设计企业国内优秀网页设计赏析
  • 删除wordpress搜索缓存襄阳seo优化排名
  • 众筹平台网站搭建长沙官网seo推广
  • 公司网站建设前期情况说明网站网络推广公司
  • 昆明hph网站建设友情链接检索