Rust Cargo命名空间简单使用

292 阅读2分钟

项目结构

lace
├── Cargo.lock
├── Cargo.toml
├── env_utils
│   ├── Cargo.toml
│   └── src
│         └── lib.rs
└── main
├── └─Cargo.toml
└── └─src
└──   └─main.rs

创建项目结构

先创建一个项目文件夹

[root]# mkdir lace
[root]# cd lace

进入项目的文件夹, 然后创建一个Cargo.toml文件,这个文件是用来配置整个工作空间的

[root]# vim Cargo.toml

并在里面写入以下内容

[workspace]
members=[
  "main"
]

然后使用cargo new一个main子模块,作为程序的主入口,main可以随意命名,和Cargo.toml中一致

[root]# cargo new env_check
     Created binary (application) `env_check` package
[root]#

使用build命令测试一下

[root]# cargo build
   Compiling main v0.1.0 (/root/work/lace/main)
    Finished dev [unoptimized + debuginfo] target(s) in 0.57s
[root]#

成功了,biuld执行成功会在项目根目录下生成Cargo.lock和target目录,这个target目录会取代所有子模块的target目录,子模块不会再生成target目录

[root]# ls
Cargo.lock  Cargo.toml  main  target

现在,再创建本项目一个子模块

这个模块起名为env_check 先在toml配置这个env_check子模块

[workspace]
members = [
    "main",
    "env_check"
]

创建这个子模块 官方对这种模块的命名为library craey

[root]# cargo new env_check --lib
     Created library `env_check` package

看一下env_check/src/lib.rs生成的内容

[root]# cat env_check/src/lib.rc
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);
    }
}

Cargo自动生成了一个add函数和一个test测试模块,这个测试模块不用管,接下来需要在main子模块的main.rs里面引入这个方法

现在编辑lace/main/Cargo.toml文件,配置一下env_check的路径

[package]
name = "main"
version = "0.1.0"
edition = "2021"

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

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

引入

接下来就可以在main/src/main.rs使用了。 编辑main.rs,使用use引入

use env_check;

fn main() {
    //测试
    let num = env_check::add(3, 8);
    println!("{}",num);
}

cargo run测试一下

[root]# cargo run
   Compiling env_check v0.1.0 (/root/work/lace/env_check)
   Compiling main v0.1.0 (/root/work/lace/main)
    Finished dev [unoptimized + debuginfo] target(s) in 0.50s
     Running `/root/work/lace/target/debug/main`
11
[root]#

到这里cargo的工作空间就配置完成了,接下来就可以开始正式写代码了