Ccache 4.14.3 исправил ложные попадания в кеш сборки

Ccache 4.14.3 исправил ложные попадания в кеш сборки
Содержание статьи

8 ноября вышел Ccache 4.14.3. Обновление исправляет два случая, когда кеш мог вернуть результат предыдущей компиляции для изменившихся входных данных. На Mentoring.digital разбираем, какие сборки затронуты и как проверить свой проект.

Что исправлено в кеше

Ccache хранит результаты компиляции C и C++ и подставляет их при совпадении входных данных. Ассемблерная директива .incbin добавляет в объектный файл содержимое двоичного файла. В этой версии исправлено распознавание директивы, когда её операнд задан макросом. Это устраняет ложные попадания в кеш для такого сценария.

Второе исправление касается GCC и предкомпилированных заголовков, или PCH. Если в режиме depend Ccache не находит такой заголовок, он передаёт компиляцию GCC напрямую. Этот режим опирается на список зависимостей компилятора. При недостающем входе безопаснее получить результат новой компиляции.

Что проверить в CI

  1. Проверьте версию командой ccache --version в том же окружении, где выполняется сборка.
  2. В отдельной задаче CI соберите одну ревизию с CCACHE_DISABLE=1 и с включённым Ccache в изолированном кеше. Сравните результат тестов.
  3. Если проект использует .incbin, измените один подключаемый двоичный файл. Проверьте, что итоговый объект содержит новое содержимое.

Для сборок с MSVC есть отдельное исправление. Ccache корректно экранирует обратные косые черты во временных файлах параметров, которые нужны для длинных командных строк. Конфигурацию проекта и выбор проверки можно разобрать с наставником по C++.

Похожие статьи по данной теме