提示
所有帖子都会不定期添加补充实战过程中发现的新内容,力争一篇文章涵盖所有内容,避免你多次查找文章,所以最好点赞或收藏,时不时回来看看。
废话
我们写程序,总会分目录和modules,rust里有packages、crates、modules这几个组织关系,
packages: 通过cargo new 创建;
crates: 通过cargo new --lib 创建;
modules: 通过关键字mod定义;
下面以实际例子说说rust里是如何组织目录和模块的,如果觉得代码多不好看明白,可以下载此demo的代码(无积分,需要关注我)
代码文件目录结构
假如我们的程序代码由主程序和一个Lib组成,通过cargo new windows和cargo new --lib hc创建后都放在pro目录下,各自的文件结构目录如下
为了使用hc这个lib下的文件,需要在windows目录下的Cargo.toml里标明lib位置:
[dependencies]
hc = {version = "1.0", path = "../hc"}
各文件内容依次如下,我尽量把各种相互引用的情况都写在了里面,看不明白的请留言
hc目录下的文件
//文件 hc\src\buttons.rs
use crate::controls;
pub struct Button {
text: String,
}
pub struct ImageButton {
button: Button,
}
//文件 hc\src\controls.rs
use crate::buttons::{Button, ImageButton};
//文件 hc\src\lib.rs
pub mod buttons;
pub mod controls;
#[cfg(test)]
mod tests {
#[test]
fn it_works() {
assert_eq!(2 + 2, 4);
}
}
windows目录下的文件,其中mod.rs是用来对外公开其所在目录里的文件(main.rs和lib.rs其实也有这个功能)
//文件 windows\src\api\mod.rs
pub mod write;
pub mod read;
//文件 windows\src\api\read.rs
use write;
pub struct Read {
}
//文件 windows\src\api\write.rs
use super::super::form;
use super::read; // super表示api
pub struct Write {
}
pub mod writebyte { // 内部的子模块,pub表示对外暴露
pub struct WriteByte {
}
}
//文件 windows\src\form.rs
use crate::gdigraphics::{GDICanvas,};
pub struct Form {
}
//文件 windows\src\gdigraphics.rs
use hc::buttons::{Button, ImageButton};
pub struct GDICanvas {
}
//文件 windows\src\main.rs
pub mod form;
mod gdigraphics;
mod api;
use api::write;
use api::write::writebyte;
use self::form::Form;
use crate::gdigraphics::GDICanvas;
fn main() {
}