CodeBlanks Logo Icon CodeBlanks

Workspace

Workspace ile birden fazla crate'i tek çatı altında yönetirsin.

Workspace

Workspace, birlikte geliştirilen birden çok paketi tek çatı altında toplar. Tüm üyeler tek bir Cargo.lock ve target/ klasörünü paylaşır; ortak bağımlılıklar bir kez derlenir:

# kök Cargo.toml
[workspace]
members = ["ortak", "api", "cli"]

[workspace.dependencies]
serde = "1"

# api/Cargo.toml
[dependencies]
ortak = { path = "../ortak" }
serde = { workspace = true }

cargo build tüm üyeleri, cargo test -p api yalnızca birini işler.

Ortak kod düzeni

Tipik bir düzen: modeller ve yardımcılar ortak kütüphanesinde, sunucu ve komut satırı ayrı binary paketlerde. Her paket yalnızca ihtiyaç duyduğu bağımlılıkları çeker:

proje/
├── Cargo.toml        # [workspace]
├── ortak/src/lib.rs  # pub fn surum()
├── api/src/main.rs   # use ortak::surum;
└── cli/src/main.rs   # use ortak::surum;

Uygulama Paylaşılan sürüm

Workspace'i modüllerle taklit et: mod ortak içinde "1.0.0" döndüren pub fn surum(), mod api ve mod cli içinde super::ortak::surum() kullanan pub fn durum() -> String. api 1.0.0 | cli 1.0.0 çıktısını üret.

Başlangıç kodu

main.rs
fn main() {
    // buraya yaz
}

Örnek çözüm

main.rs
mod ortak {
    pub fn surum() -> &'static str {
        "1.0.0"
    }
}

mod api {
    pub fn durum() -> String {
        format!("api {}", super::ortak::surum())
    }
}

mod cli {
    pub fn durum() -> String {
        format!("cli {}", super::ortak::surum())
    }
}

fn main() {
    println!("{} | {}", api::durum(), cli::durum());
}

Beklenen çıktı

api 1.0.0 | cli 1.0.0

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Bir workspace üyesi diğerine nasıl bağımlı olur?

  • path = "../ortak" ile yerel yol bağımlılığı Doğru cevap
  • crates.io'dan indirerek
  • mod ortak; yazarak
  • Otomatik bağlanır

Açıklama: Yol bağımlılığı, değişikliklerin yayımlamadan hemen görülmesini sağlar.

2 Üyeleri listele

Soru
[workspace]
____ = ["ortak", "api", "cli"]
Cevap
[workspace]
members = ["ortak", "api", "cli"]

Açıklama: Workspace üyeleri members listesinde tanımlanır.

3 Öğe ve görevi

Kavram Anlamı
[workspace] Çatı tanımı
path = "../ortak" Yerel bağımlılık
workspace = true Ortak sürümü kullan
cargo test -p api Tek üye

Orta seviye bölümündeki tüm dersler