Rust Cargoワークスペース
大規模なプロジェクトでRustプロジェクトを開発するときに便利
code:workspace-tree.txt
workspace-root
├── Cargo.lock
├── Cargo.toml
├── main-cargo
│ ├── Cargo.toml
│ └── src
│ └── main.rs
├── sub-cargo
│ ├── Cargo.toml
│ └── src
│ ├── lib.rs
│ └── tests.rs
└── target
└── (省略。ビルドしたファイルがズラッと入ってる)
※補足:main-cargoがバイナリタイプのプロジェクト、sub-cargoがライブラリのプロジェクト
workspace-root内のCargo.toml内はこうなっている
code:Cargo.toml
members = [
"main-cargo",
"sub-cargo"
]
membersで各Cargoプロジェクトの紐付けをすることができる
ワークスペースメンバーを追加するときは先にCargo.toml内のmembersにメンバー名を追加してから
cargo new --[bin or lib] [メンバー名]を実行する
main-cargo内のCargo.toml
code:main-cargo/Cargo.toml
# 省略
sub-cargo = { path = "../sub-cargo" }
sub-cargo内のsrc/lib.rs
code:sub-cargo/src/lib.rs
mod tests;
type SameResultType<T> = Result<T, T>;
pub fn res(res: bool) -> SameResultType<bool> {
if res {
Ok(true)
} else {
Err(false)
}
}
pub fn add_one(x: i32) -> i32 {
x + 1
}
main-cargo内のsrc/main.rs
code:main-cargo/src/main.rs
extern crate sub_cargo; // 補足: ソース内の-は_として扱う
fn main() {
let res = sub_cargo::res(true).unwrap_or(false);
println!("resは{}", res); // resはtrue
}
cargo run -p main-cargoのコマンドを実行するとmain-cargoのプログラムを実行できる
cargo testをワークスペースルートで実行すると、各ワークスペースメンバーのユニットテストを実行できる