Я пытался использовать предварительно скомпилированные заголовки с GCC, чтобы ускорить одну из моих сборок.Это проект с 80 файлами, большинство из которых содержат один заголовок, который я предварительно скомпилировал.Этот заголовок включает в себя большое количество других заголовков.По крайней мере, на бумаге это похоже на хороший вариант использования PCH.
При использовании clang я получаю ожидаемое ускорение, которое примерно в 2 раза быстрее.Однако на gcc компиляция занимает значительно больше .
. Я храню свои PCH в отдельном каталоге и пробовал как добавить каталог с -I
, так и указать PCH напрямую с-include
(это не сработало: в итоге gcc включил как PCH, так и обычный заголовок).PCH компилируются с теми же параметрами, что и исходные файлы.
Без PCH компиляция занимает около 13 секунд.С PCH это занимает около 18 секунд.С помощью -H
и -Winvalid-pch
я подтвердил, что gcc (только) включает в себя предварительно скомпилированный заголовок.Полный вывод -H
для одного файла выглядит следующим образом:
! .bake_cache/x64-Linux-debug/include/corto.h.gch
./src/lang/boolean.c
!
должен указывать, что gcc успешно загрузил pch:
-H Распечататьимя каждого используемого файла заголовка, в дополнение к другим обычным действиям.Каждое имя имеет отступ, чтобы показать, насколько глубоко оно находится в стеке #include.Предварительно скомпилированные заголовочные файлы также печатаются, даже если они признаны недействительными;неверный предварительно скомпилированный заголовочный файл печатается с «... x», а действительный с «...!».
От: https://gcc.gnu.org/onlinedocs/gcc/Preprocessor-Options.html
Я в растерянности.Кажется, что gcc может найти и использовать PCH, но все же занимает больше времени.Есть идеи, что может быть причиной этого?