乐趣区

关于rust:Rust-workspace的使用

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 目录

    mkdir my_workspace
    cd my_workspace
  2. 配置 workspace 的Cargo.toml

    my_workspace 目录中,创立Cargo.toml

    [workspace]
    
    members = [
     "library",
     "app",
    ]
  3. 创立包

    • 对于 library 包:
    mkdir library
    cd library
    cargo init --lib

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

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 包:

    cd ../ # 回到 workspace 根目录
    mkdir app
    cd app
    cargo init
  1. 增加依赖

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

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

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

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 我的项目能够更轻松地治理多包的构建、测试和依赖关系,特地是对于大型或分解成多个组件的我的项目而言。

退出移动版