crate是一个二进制项或者库。

crate root是一个源文件,Rust编译器以其为起始点构造crate的根模块。

包是提供一系列功能的一个或者多个crate。

一个包会包含一个Cargo.toml文件去描述如何构建这些crate。

包中包含内容的规则:

  • 一个包至少包含一个crate
  • 一个包至多只能包含一个库crate
  • 一个包可以包含任意多个二进制crate,通过将文件放在 src/bin 目录下,每个 src/bin 下的文件都会被编译成一个独立的二进制crate

Cargo遵循的约定:

  • src/main.rs 就是一个与包同名的二进制crate的crate根
  • src/lib.rs 就是一个与包同名的库crate的crate根
  • crate根文件由Cargo传递给rustc来实际构建库或者二进制项目
  • 如果一个包同时含有 src/main.rs 和 src/lib.rs,则它有两个与包同名的crate,一个库一个二进制项