Модуль 3 · Команды Cargo
Сборка и запуск
cargo build и cargo run — команды которые вы будете использовать каждый день. Здесь все их возможности.
🛠️ Практика
🕐 ~20 минут
⚡
Debug vs Release — два режима сборки
Cargo компилирует в двух режимах. Понимание разницы критично для правильного использования.
Debug (по умолчанию)
Команда:
Бинарник:
Компиляция: быстрая
Оптимизации: нет
Debug-символы: есть (для отладчика)
Размер бинарника: большой
Скорость программы: медленнее
cargo buildБинарник:
target/debug/Компиляция: быстрая
Оптимизации: нет
Debug-символы: есть (для отладчика)
Размер бинарника: большой
Скорость программы: медленнее
Release
Команда:
Бинарник:
Компиляция: медленная
Оптимизации: полные
Debug-символы: нет
Размер бинарника: меньше
Скорость программы: максимальная
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, может весить несколько ГБ