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