$ sudo teach IT
Модуль 6 · Воркспейсы

Создание воркспейса

Шаг за шагом — создаём воркспейс с несколькими крейтами и настраиваем их взаимодействие.

🔧 Практика 🕐 ~25 минут
🚀

Создание воркспейса с нуля

1 Создать корневую папку и Cargo.toml
Терминал
mkdir my_workspace
cd my_workspace
# Создать Cargo.toml вручную (cargo new не создаёт воркспейсы)
my_workspace/Cargo.toml
[workspace]
resolver = "2"
members = ["core", "cli"]

[workspace.dependencies]
serde = { version = "1.0", features = ["derive"] }
2 Создать крейты
Терминал
cargo new --lib core   # библиотека core
cargo new cli          # бинарник cli
3 Настроить Cargo.toml каждого крейта
core/Cargo.toml
[package]
name = "core"
version = "0.1.0"
edition = "2021"

[dependencies]
serde = { workspace = true }   # из workspace.dependencies
cli/Cargo.toml
[package]
name = "cli"
version = "0.1.0"
edition = "2021"

[dependencies]
core = { path = "../core" }   # зависимость на другой крейт воркспейса
💻

Команды в воркспейсе

Терминал (из корня воркспейса)
cargo build              # собрать все крейты
cargo test               # тестировать все крейты
cargo build -p cli       # собрать только cli (-p = --package)
cargo test -p core       # тестировать только core
cargo run -p cli         # запустить бинарник cli
cargo clippy             # проверить все крейты
cargo fmt                # форматировать все крейты
💡 Флаг -p имя (или --package имя) выбирает конкретный крейт. Без него команда применяется ко всему воркспейсу.
🔧

resolver = "2"

В корневом Cargo.toml воркспейса всегда указывайте resolver = "2" — это второй вариант решения зависимостей, он умнее обрабатывает фичи:

[workspace]
resolver = "2"   # обязательно для воркспейсов с edition = "2021"
members = [...]
📌 Что важно запомнить
→ Корневой Cargo.toml — только [workspace], без [package]
→ cargo new создаёт крейты прямо в папке воркспейса
→ cargo build -p имя — собрать конкретный крейт
→ resolver = "2" — всегда указывать в воркспейсах

Тест

3 вопроса