[Rust] Workspace,Package, Crate 和 Module

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",
]

參照

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章