本文将围绕 Rust 项目的工程结构介绍一下相关的概念:crate、package、module、path、workspace。最终,我们会清晰地理解像下图所示的一个典型 Rust 项目结构中的各个组成部分:
1. Crate
Crate 是 Rust 中的最小编译单元(mod 不是独立的编译单元)。这一点和 C/C++、Java 等其他主流语言很不同,它们的最小编译单元可以是单个源文件。编译时,rust 会先把 crate 里的所有代码扫描一遍,建立符号表,然后再开始类型检查和编译,所以,相比 C/C++,这将带来以下显著收益:
- 没有 #include,不再需要头文件
- 规避了“分别编译”引发的大量复杂问题
Crate 有两种:会被编译为可执行程序的binary crate以及会被编译成库的library crate。和 C/C++ 类似,如果是 binary crate,程序中必须要有一个 main 函数作为应用程序的“入口”。为此 cargo 规定:
- binary crate 必须提供一个