Предварительно скомпилированные заголовки и ccache предназначены для совершенно разных вариантов использования. ccache может использоваться вместе с предварительно скомпилированными заголовками, они не являются взаимоисключающими.
ccache кэширует весь заданный исходный файл, заголовки и все, кешируя скомпилированный объектный модуль. Технически, ccache берет всю предварительно обработанную систему перевода источника, хеширует ее и кэширует результирующий объектный модуль.
Предварительно скомпилированные заголовки обеспечивают небольшую экономию времени, когда одни и те же файлы заголовков имеют #include
d несколько раз от разных блоков перевода источника. Но если один и тот же исходный код многократно компилируется, предварительно скомпилированные заголовки не помогают (за исключением единственного преимущества использования предварительно скомпилированного заголовка). Вот где приходит ccache, ccache спокойно пропускает всю фазу компиляции и просто извлекает ранее скомпилированный объектный модуль из кеша.
Итак, не имеет смысла сравнивать, какой подход лучше, ccache или предварительно скомпилированные заголовки. Они решают две разные проблемы.