Как перестать смотреть на индикатор сборки и начать жить

06 Aug, 2026
7,528
🔱 717
👥 59

Представьте: вы поправили одну строчку в коде, нажали cargo build или make, и ушли пить кофе, потому что проект пересобирается десять минут. Знакомая история? Особенно обидно, когда вы точно знаете, что 90% кода не изменилось, но компилятор всё равно решает перепроверить половину зависимостей. В Mozilla с этой проблемой сталкиваются постоянно — сборка Firefox занимает вечность. Именно так появился sccache.

Что это такое и зачем оно мне

Если коротко, sccache — это кэширующий прокси для компилятора. Он перехватывает команды сборки, считает хеш от исходников и флагов, и если такая комбинация уже встречалась, просто подсовывает готовый объектный файл из кэша.

Проект идейно продолжает традиции старого доброго ccache, но с парой критических отличий. Во-первых, он написан на Rust (что логично для Mozilla). Во-вторых, он умеет работать с облачными хранилищами. Это значит, что вы можете расшарить кэш между всеми разработчиками в команде или между разными стадиями CI/CD.

Чем sccache отличается от обычного ccache

Главная фишка здесь — поддержка Rust. Обычные инструменты кэширования часто пасуют перед rustc, а sccache справляется с ним на ура. Кроме того, список поддерживаемых языков и компиляторов внушает уважение:

  • C/C++ (gcc, clang, MSVC)
  • Rust
  • CUDA (nvcc)
  • NVIDIA HPC (nvc++)
  • AMD ROCm (hipcc)

Интересная деталь: sccache работает по модели клиент-сервер. Когда вы запускаете сборку, локальный демон висит в памяти и держит часть данных под рукой, что ускоряет процесс. Если сервера нет, sccache сам его поднимет.

Облачный кэш: магия для командной разработки

Локальный кэш на диске — это приятно, но sccache раскрывается по-настоящему, когда вы подключаете внешнее хранилище. Список бэкендов огромный: S3, Google Cloud Storage, Azure, Redis, Memcached и даже GitHub Actions Cache.

Зачем это нужно? Допустим, ваш коллега уже собрал проект утром. Когда вы придете и сделаете git pull, sccache подтянет готовые артефакты из общего S3-бакета. Ваша «первая» сборка пройдет за секунды вместо минут. В CI это экономит не только время, но и деньги, особенно если вы платите за минуты работы раннеров.

Как завести это у себя

Установка максимально простая. На macOS хватит brew install sccache, на Windows — scoop install sccache. Если у вас установлен Rust, можно просто выполнить:

cargo install sccache --locked

Чтобы заставить Rust использовать кэш, добавьте переменную окружения:

export RUSTC_WRAPPER=sccache
cargo build

Для C++ проектов с CMake всё тоже прозрачно:

cmake -DCMAKE_C_COMPILER_LAUNCHER=sccache -DCMAKE_CXX_COMPILER_LAUNCHER=sccache ..

Нюансы и подводные камни

Не всё так идеально, как кажется на первый взгляд. Есть несколько моментов, которые стоит учитывать перед внедрением.

Во-первых, sccache по умолчанию требует абсолютные пути к файлам. Если вы собираете проект в /home/user/project, а ваш коллега в /home/dev/project, кэш не сойдется. Чтобы это победить, нужно настроить SCCACHE_BASEDIRS — тогда пути станут относительными внутри указанных директорий.

Во-вторых, в Rust есть ограничения. Инструмент не умеет кэшировать инкрементальную компиляцию (её придется выключить) и финальную линковку бинарников или динамических библиотек. То есть lib секции кэшируются отлично, а вот финальный bin всё равно потребует времени на сборку.

Стоит ли пробовать

Если вы работаете над проектом, который собирается дольше пары минут, — однозначно да. Даже локальный кэш заметно ускоряет переключение между ветками (git checkout).

Особенно sccache пригодится тем, кто:

  1. Мучается с долгими сборками в CI/CD.
  2. Работает в большой команде над общим C++/Rust кодом.
  3. Использует специфические вещи вроде CUDA.

Проект живой, поддерживается Mozilla и активно используется в крупных Open Source проектах. Это не просто «еще одна утилита», а проверенный временем инструмент, который реально экономит часы жизни разработчика.

Посмотреть статистику работы (сколько раз вы сэкономили время) можно командой:

sccache --show-stats

Видеть там Cache hits вместо Misses — отдельный вид удовольствия.

🍪 Мы используем файлы cookie и сервис аналитики Яндекс.Метрика, чтобы сайт работал лучше. Продолжая пользоваться devtrends.ru, вы соглашаетесь с обработкой данных согласно Политике конфиденциальности.