Каковы наилучшие кандидаты для предварительно скомпилированного файла заголовка? Могу ли я разместить заголовки STL и Boost там, хотя у них есть шаблоны? И это сократит время компиляции? Кроме того, каковы наилучшие настройки IDE для сокращения времени компиляции?
Что добавить в предварительно скомпилированный заголовок? (MSVC)
Ответ 1
Быстрый ответ: заголовки STL и Boost действительно принадлежат к предварительно скомпилированному файлу заголовка, хотя эти файлы заголовков определяют классы шаблонов.
При создании предварительно скомпилированного файла заголовка компилятор анализирует текст заголовка (значительную задачу!) и преобразует его в двоичный формат, оптимизированный для выгоды компилятора.
Даже если классы шаблонов будут созданы, когда будут скомпилированы другие .cpp файлы, они будут созданы из информации в предварительно скомпилированном заголовке, что значительно быстрее для компилятора.
(позднее добавление)
Одна вещь, которую вы должны not включить в предварительно скомпилированный заголовок, - это файлы, которые являются частью вашего проекта и часто меняются, даже если каждый файл .CPP содержит эти файлы.
Причина в том, что генерация предварительно скомпилированного заголовка может занять много времени, потому что библиотеки boost, stl и windows очень большие.
У вас может быть простой файл (например, "StringDefs.h" ), который все использует. Если StringDefs.h включен в stdafx.h, а один разработчик касается StringDefs.h, то каждый разработчик должен дожидаться перекомпиляции цельного прекомпилированного заголовка. Это было бы намного быстрее, если StringDefs.h был оставлен вне предварительно скомпилированного заголовка и проанализирован вместе с каждым .CPP файлом.
Ответ 2
Одно дополнение к Эндрю Шеферду ответ. Используйте предварительно скомпилированный заголовок для файлов заголовков, которые являются внешними по отношению к вашему проекту, для файлов, которые изменяются нечасто. Если вы изменяете файлы заголовков в текущем проекте все время, вероятно, не стоит предварительно компилировать их.
Ответ 3
Я написал статью о методах, которые сокращают время компиляции. Среди этих методов сообщение о предварительно скомпилированном заголовке и его приложении можно найти здесь. В нем также есть раздел о лучших методах, которые могут оказаться интересными. Скрипты CMake, которые обрабатывают его прозрачно, включены.
Ответ 4
Поместите что-нибудь в предварительно скомпилированный заголовок, который в большинстве случаев будет содержать большинство файлов .cpp в этом проекте. Это действительно для любого файла заголовка. Это позволяет компилятору разобрать эти файлы один раз, а затем повторно использовать эту информацию во всех файлах .cpp в одном проекте.