Модуль 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 вопроса