项目结构
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的工作空间就配置完成了,接下来就可以开始正式写代码了