Модуль 5 · Профили сборки
Кастомные профили
Помимо dev и release можно создавать собственные профили — например, для тестирования с оптимизацией или для CI.
📖 Теория 🕐 ~15 минут
🛠️
Создание кастомного профиля
Новый профиль объявляется в Cargo.toml с ключом inherits — от какого профиля наследовать базовые настройки. Затем переопределяются только нужные поля:
Cargo.toml
# Профиль для тестирования с оптимизацией (тесты быстрее, но с отладкой)
[profile.test-opt]
inherits = "release" # берём все настройки release
debug = true # но включаем отладочные символы
opt-level = 2 # немного снижаем оптимизацию
# Профиль для CI — максимальная оптимизация без LTO (быстрее собирается)
[profile.ci]
inherits = "release"
lto = false
codegen-units = 8
Использование
cargo build --profile test-opt
cargo test --profile test-opt
cargo build --profile ci
💡
inherits обязателен для кастомных профилей — без него Cargo не знает какие умолчания брать. Указывайте либо "dev", либо "release".💡
Популярные кастомные профили
bench — бенчмарки с отладкой
[profile.bench]
inherits = "release"
debug = true # символы для профилировщика
Быстрый код + символы для perf/flamegraph
dev-opt — разработка с ускорением
[profile.dev-opt]
inherits = "dev"
opt-level = 1 # немного оптимизации, сборка ещё быстрая
Для проектов где dev без оптимизаций слишком медленно работает
wasm — сборка для WebAssembly
[profile.wasm]
inherits = "release"
opt-level = "z"
lto = true
panic = "abort"
Минимальный размер .wasm файла
🎯
Настройка профиля только для зависимостей
Можно ускорить итерацию: ваш код компилируется без оптимизации (быстро), а зависимости — с оптимизацией (работают быстро):
Cargo.toml
[profile.dev]
opt-level = 0
# Все зависимости в dev-сборке с opt-level=3
[profile.dev.package."*"]
opt-level = 3
Зависимости компилируются редко (они кешируются), поэтому это не сильно замедляет сборку, зато программа работает намного быстрее в режиме разработки.
📌 Что важно запомнить
→ [profile.название] + inherits = "dev" или "release" — создать кастомный профиль
→ cargo build --profile название — использовать кастомный профиль
→ [profile.dev.package."*"] — настройка оптимизации только для зависимостей
Тест
3 вопроса