16.rust项目管理

一、前言

前面我们已经使用了很多别人写的包,而本文就将详细介绍我们如何去写一个属于自己的包。

包的作用相信大家已经有所领悟:可以共享常用代码,避免大家造轮子。

在rust中,包的别名是crate,而crate则是rust编译的最小代码单位,比如我们前面写的main.rs中的代码,最终会被编译为一个二进制可执行文件。

main.rs文件中的代码此时就属于我们自定义项目的一个源代码文件。

类比之下,其实它这里这个包的概念与vs中解决方案的概念很类似,而crate就像是vs中的各个项目。

没错,二进制项目在rust中同样也被称为crate,除了二进制外,当然也还有更常见的库,比如动态库与静态库

总的来说,rust中将项目一共分为了四个层次:工作空间、crate、模块、源码文件

graph LR
P[工作空间]-->A[多个crate]
A-->B[二进制]
A-->C[库]
B-->f1([多个模块])
C-->f1([多个模块])
f1-->f2([源代码文件1])
f1-->f3([源代码文件2])
f1-->f4([......])

一个工作空间可以包含多个crate,而crate可以被分为二进制和库两种。

每个crate都是由多个模块组成的,并且一个模块可以由多个源文件组成。

但一般我们并不这样做,更多的时候,至少我个人更喜欢让一个源文件对应一个模块,方便整理,而文件名就是模块名。

二、模块

我们从底层往上层看,首先是模块,虽然前面我说大多数时候我都更喜欢一个文件对应一个模块,但你也可以不这样做:

image-20231216084941927

比如上面这样,就属于内联方式,直接用mod关键字声明一个模块,然后将函数、结构体等写在其内部就行了。

但此时要注意,模块中的东西默认都是私有的,如果想要让模块外使用,就必须添加pub关键字。

使用方式就是模块名::,后面紧跟其内部写的东西就行了。

作者:余识
全部文章:0
会员文章:0
总阅读量:0
c/c++pythonrustJavaScriptwindowslinux