Что добавить в предварительно скомпилированный заголовок? (MSVC)

Каковы наилучшие кандидаты для предварительно скомпилированного файла заголовка? Могу ли я разместить заголовки STL и Boost там, хотя у них есть шаблоны? И это сократит время компиляции? Кроме того, каковы наилучшие настройки IDE для сокращения времени компиляции?

Ответ 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 в одном проекте.