package(包)
一個 package 對應一個項目,package 的信息在 Cargo.toml
裏面定義。
crate(木箱、箱子)
crate 指的是 package 編譯後的輸出文件。以 Windows 爲例,可能會產生 .exe
文件或者 .rlib
文件。
crate 有兩種類型: executable(可執行的) 和 library(庫)。
一個 package 可以包含 0 到 n 個 可執行的 crate,和 0 到 1 個 library。
如果,想要在一個 package 裏只生成一個可執行的文件,只要寫 src/main.rs
文件就可以了。
如果,想要在一個 package 裏只生成一個庫文件,只要寫 src/lib.rs
文件就可以了。
如果,想要在一個 package 裏生成多個可執行的文件和一個庫文件,需要在 src/bin
目錄下放入多個含有main()
函數的 rust 文件;和 一個 src/lib.rs
文件。這種方法有點兒奇怪,所以建議避免使用這種模式,而使用 workspace 來管理多個編譯結果。
module(模塊)
一個 rust 文件對應一個 module。module 裏可以內嵌多個 module。
workspace(工作空間)
通常,我們期望一個 package 只產生一個 crate(編譯結果)。
當需要管理多個項目的時候,workspace 提供了一種更友好的方式。
一個 workspace 是一個目錄,含一個 Cargo.toml 文件,並且讓包含的 packages 共享一個Cargo.lock
,統一了依賴。
所有 packages 的輸出都會放到 workspace 的 target
目錄裏。
一個典型的 workspace 目錄結構:
├── Cargo.lock
├── Cargo.toml
├── add-one
│ ├── Cargo.toml
│ └── src
│ └── lib.rs
├── adder
│ ├── Cargo.toml
│ └── src
│ └── main.rs
└── target
workspace 的定義文件: Cargo.toml
[workspace]
members = [
"adder",
"add-one",
]