Полностью ли ccache превосходит средства предварительно скомпилированных заголовков gcc?

Чтобы ускорить время компиляции gcc, у нас есть два варианта:

  • ccache
  • предварительно скомпилированные заголовки gcc

Однако я не знаю, что лучше при каких обстоятельствах.

Я погуглил этот вопрос и получил смутное впечатление, что ccache полностью превосходит другие. Это правильно?


person xmllmx    schedule 26.10.2016    source источник


Ответы (1)


Предварительно скомпилированные заголовки и ccache предназначены для совершенно разных вариантов использования. ccache можно использовать вместе с предварительно скомпилированными заголовками, они не исключают друг друга.

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

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

Таким образом, не имеет смысла сравнивать, какой подход лучше, ccache или предварительно скомпилированные заголовки. Они решают две разные задачи.

person Sam Varshavchik    schedule 26.10.2016