rust拾遗之workspace
提纲
1、为什么需要 workspace?
2、什么是 workspace?
3、如何应用 workspace?
4、扩展:依赖升级
1、为什么需要 workspace?
如果功能和逻辑都被构建在一个crate中,随着项目开发的深入,你可能会发现,crate越来越大,内部结构也越来越复杂。为了提高项目的可重用性,同时降低复杂度。你希望将此crate进一步拆分为多个crate。针对此种情况,Cargo.toml中提供了[workspace]配置。
2、什么是 workspace?
workspace,顾名思义是工作空间。在工作空间中存在多个crate,它们共享Cargo.lock和target输出目录。
3、如何应用 workspace?
我们通过一个简单的例子来了解如何应用workspace。示例中主要包含两个crate:可执行crate adder和library crate add_one。并在add_one crate中提供add_one函数供adder crate使用。
首先,创建文件夹add,并在其中添加Cargo.toml。
mkdir add
cd add
touch Cargo.toml
然后,打开Cargo.toml并添加:
[workspace]
members = [
"adder",
"add_one"
]
成功保存后。执行cargo new adder构建可执行crate,并执行cargo new add_one --lib构建library crate。此时项目结构如下:
├── Cargo.lock
├── Cargo.toml
├── add_one
│ ├── Cargo.toml
│ └── src
│ └── lib.rs
├── adder
│ ├── Cargo.toml
│ └── src
│ └── main.rs
└── target
(如果未出现上述结构,执行cargo build后即可看到)
最后,打开add_one/src/ib.rs文件,添加如下函数:
pub fn add_one(x: i32) -> i32 {
x + 1
}
同时,修改adder/src/main.rs文件中的内容如下:
use add_one;
fn main() {
let num = 10;
println!(
"Hello, world! {} plus one is {}!",
num,
add_one::add_one(num)
);
}
保存成功后。要想保证代码编译通过,需要在adder crate中添加add_one crate依赖,修改adder/Cargo.toml文件中[dependencies]部分为如下内容:
[dependencies]
add_one = { path = "../add_one" }
至此,所有需求编码完成。
运行cargo run -p adder后,即可看到
Hello, world! 10 plus one is 11!
4、扩展:依赖升级
使用workspace构建的多crate项目由于只会存在一个Cargo.lock,为了保证各crate的依赖兼容,需要进行依赖升级,规则如下:
(依赖版本的构成: 主版本号.次版本号.修订号)
主版本号为零时,主版本号和次版本号不变,修订号升级到最新版本
主版本号不为零时,主版本号不变,次版本号和修订号升级到最新版本
以clap为例
升级前 | 升级后 |
---|---|
0.8.1 | 0.8.6 |
1.1.0 | 1.3.2 |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
2021-08-19 centos7虚拟机安装minikube和kubectl