$ sudo teach IT
Модуль 3 · Команды Cargo

Сборка и запуск

cargo build и cargo run — команды которые вы будете использовать каждый день. Здесь все их возможности.

🛠️ Практика 🕐 ~20 минут
⚡

Debug vs Release — два режима сборки

Cargo компилирует в двух режимах. Понимание разницы критично для правильного использования.

Debug (по умолчанию)
Команда: cargo build
Бинарник: target/debug/
Компиляция: быстрая
Оптимизации: нет
Debug-символы: есть (для отладчика)
Размер бинарника: большой
Скорость программы: медленнее
Release
Команда: cargo build --release
Бинарник: target/release/
Компиляция: медленная
Оптимизации: полные
Debug-символы: нет
Размер бинарника: меньше
Скорость программы: максимальная
💡 Правило: во время разработки используйте debug (быстрая компиляция). Для финального бинарника, замеров производительности, CI-артефактов — всегда --release. Никогда не замеряйте скорость на debug-сборке: результаты будут некорректны.
🔨

cargo build — все варианты

Терминал
cargo build                     # debug сборка
cargo build --release           # release сборка с оптимизациями
cargo build --bin my_app        # собрать конкретный бинарник (если их несколько)
cargo build --lib               # собрать только библиотечную часть
cargo build --example hello     # собрать пример из examples/hello.rs
cargo build --features "json"   # включить фичи
cargo build --all-features      # включить все фичи
cargo build --no-default-features  # отключить дефолтные фичи

Посмотреть список всех бинарников в проекте:

Терминал
cargo build --release --message-format=json  # JSON-вывод для CI
▶️

cargo run — запуск с аргументами

Терминал
cargo run                          # запустить в debug режиме
cargo run --release                # запустить release сборку
cargo run -- --help                # передать аргументы программе (после --)
cargo run -- input.txt --verbose   # программа получит: input.txt --verbose
cargo run --bin server             # запустить конкретный бинарник
cargo run --example demo           # запустить пример из examples/
💡 Двойное тире -- разделяет аргументы Cargo от аргументов вашей программы. Всё что после -- передаётся непосредственно в fn main() как аргументы командной строки.
📁

Папка target/ — что там лежит

Структура target/
target/
├── debug/                  ← debug сборки
│   ├── my_app              ← ваш бинарник (Linux/macOS)
│   ├── my_app.exe          ← ваш бинарник (Windows)
│   ├── deps/               ← скомпилированные зависимости
│   ├── build/              ← артефакты build.rs
│   └── .fingerprint/       ← кэш инкрементальной компиляции
├── release/                ← release сборки
│   ├── my_app
│   └── deps/
└── .cargo-lock             ← блокировка для параллельных сборок
⚠️ Папка target/ может весить 1–10 ГБ для больших проектов — Cargo кэширует все промежуточные артефакты. Удалить: cargo clean. Вручную не трогайте содержимое target/.
📌 Что важно запомнить
→ Debug — быстрая компиляция, медленный бинарник; Release — медленная компиляция, быстрый бинарник
→ Никогда не замеряйте производительность на debug-сборке
→ cargo run -- аргументы — двойное тире разделяет аргументы Cargo и программы
→ target/ не коммитится в git, может весить несколько ГБ