前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Rust workspace的使用

Rust workspace的使用

作者头像
fliter
发布2024-02-28 13:44:38
1640
发布2024-02-28 13:44:38
举报
文章被收录于专栏:旅途散记旅途散记

Rust中Workspace的使用

对于较大型项目,随着功能的不断增加,规模的不断扩大,将面临如何组织项目的问题。在这种情况下,可以使用 Cargo workspace来组织和管理项目。

workspace可以用于管理多个依赖包,它允许在一个单独的项目中构建、测试和共享多个包。这一机制特别适用于大型项目,或者当想将一个项目拆分成多个较小的、可重用的组件时。

引入的背景

workspace可以帮助管理多个相关的包,通过共享同一个Cargo.lock文件和同一个输出目录(target),以及其他配置(比如发布配置)

在Rust出现workspace之前,独立管理多个相关的包可能非常困难。每个包都需要单独配置、编译和测试,这使得跨包的依赖管理和版本控制变得复杂。随着项目规模的增长,这种方法变得越来越不可持续。

为了解决这些问题,Rust引入了workspace概念,目的是简化这些工作,特别是在涉及多个包的场景中。workspace允许开发者在一个共享的环境中工作,其中所有包都可以被统一构建和测试,依赖关系也被智能地管理。

如何使用

要在Rust中使用workspace,需要创建一个顶层的Cargo.toml文件来定义workspace及其成员。

下面是一个简单的例子:

假设想创建一个名为my_workspace的workspace,其中包含两个包:library(一个库包)和app(一个二进制包,依赖于library)。

  1. 创建workspace目录
代码语言:javascript
复制
mkdir my_workspace
cd my_workspace
  1. 配置workspace的Cargo.toml

my_workspace目录中,创建Cargo.toml

代码语言:javascript
复制
[workspace]

members = [
    "library",
    "app",
]
  1. 创建包
  • 对于library包:
代码语言:javascript
复制
mkdir library
cd library
cargo init --lib

默认生成的lib.rs中会有如下内容:

代码语言:javascript
复制
pub fn add(left: usize, right: usize) -> usize {
    left + right
}

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn it_works() {
        let result = add(2, 2);
        assert_eq!(result, 4);
    }
}
  • 对于app包:
代码语言:javascript
复制
cd ../ # 回到workspace根目录
mkdir app
cd app
cargo init
  1. 添加依赖

appCargo.toml中添加对library的依赖:

代码语言:javascript
复制
   [dependencies]
   library = { path = "../library" }

并且在app/main.rs中,调用一下library中的add函数:

代码语言:javascript
复制
use library;

fn main() {
    println!("Hello, world!");

    let rs = library::add(1, 6);

    println!("最终结果为: {}", rs);
}
  1. 构建和运行

在workspace根目录下运行cargo build,或cargo run -p app来构建或运行特定的包。

(只会有一个全局的target目录,即便在app目录下执行cargo build,也不会在app目录下再生成一个target文件夹)

综上,通过使用workspace,Rust项目可以更轻松地管理多包的构建、测试和依赖关系,特别是对于大型或分解成多个组件的项目而言。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2024-02-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 旅途散记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Rust中Workspace的使用
    • 引入的背景
      • 如何使用
      相关产品与服务
      腾讯云服务器利旧
      云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档