Шпаргалка по Cargo
Cargo — система сборки и менеджер пакетов в одном инструменте. Он скачивает зависимости, собирает проект, запускает тесты и публикует библиотеки.
Команды на каждый день
| Команда | Что делает |
|---|---|
cargo new имя | Создаёт проект в новом каталоге. С флагом --lib — библиотеку. |
cargo check | Проверяет код без генерации исполняемого файла. Заметно быстрее сборки, удобно запускать постоянно. |
cargo run | Собирает и запускает программу. Аргументы программе передаются после --. |
cargo build --release | Сборка с оптимизациями, результат в target/release. |
cargo test | Запускает модульные и интеграционные тесты, а заодно примеры из документации. |
cargo add serde | Добавляет зависимость в Cargo.toml. |
cargo update | Обновляет зависимости в пределах разрешённых версий. |
cargo fmt | Форматирует код по общепринятому стилю. |
cargo clippy | Линтер: находит подозрительные места и предлагает более идиоматичный код. |
cargo doc --open | Собирает документацию проекта и всех зависимостей и открывает её в браузере. |
cargo tree | Показывает дерево зависимостей. |
Cargo.toml
Описание проекта лежит в файле Cargo.toml в корне. Минимальный вариант с одной зависимостью выглядит так:
[package]
name = "hello"
version = "0.1.0"
edition = "2024"
[dependencies]
serde = { version = "1", features = ["derive"] }
[profile.release]
lto = true # оптимизация на этапе компоновки
codegen-units = 1 # медленнее сборка, быстрее программа
Запись version = "1" означает «любая версия 1.x»: Cargo следует семантическому версионированию и не обновит зависимость до несовместимой 2.0. Точные версии всех пакетов он записывает в Cargo.lock — этот файл стоит хранить в репозитории, чтобы сборка у всех получалась одинаковой.
Структура проекта
hello/
├── Cargo.toml
├── Cargo.lock
├── src/
│ ├── main.rs # точка входа программы
│ └── lib.rs # корень библиотеки, если она есть
├── tests/ # интеграционные тесты
├── examples/ # примеры: cargo run --example имя
└── target/ # результаты сборки, в репозиторий не кладут
Полезные привычки
- Во время работы запускайте
cargo check, а неcargo build: обратная связь приходит в разы быстрее. - Перед коммитом —
cargo fmtиcargo clippy. Споры о стиле в команде на этом заканчиваются. - Не сравнивайте скорость отладочной сборки с другими языками. Без
--releaseоптимизации выключены, и разница бывает в десятки раз. - Несколько связанных крейтов удобно объединить в рабочее пространство (
[workspace]): общийCargo.lockи общий каталогtarget.