Что положить в скомпилированный заголовок? (MSVC) - PullRequest
38 голосов
/ 27 марта 2009

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

Ответы [ 4 ]

50 голосов
/ 27 марта 2009

Быстрый ответ: заголовки STL и Boost действительно принадлежат предварительно скомпилированному заголовочному файлу, хотя эти заголовочные файлы определяют классы шаблонов.

При создании предварительно скомпилированного файла заголовка компилятор анализирует текст заголовка (важная задача!) И преобразует его в двоичный формат, оптимизированный для выгоды компилятора.

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

<ч /> (позднее)

Одна вещь, которую вы должны не включить в предварительно скомпилированный заголовок, - это файлы, которые являются частью вашего проекта и часто меняются, даже если каждый файл .CPP содержит эти файлы.

Причина в том, что генерация предварительно скомпилированного заголовка может занять много времени, потому что библиотеки boost, stl и windows очень большие.

У вас может быть простой файл (например, "StringDefs.h"), который все использует. Если StringDefs.h включен в stdafx.h, и один разработчик касается StringDefs.h, то каждый разработчик должен дождаться перекомпиляции всего предварительно скомпилированного заголовка . Было бы намного быстрее, если бы StringDefs.h был исключен из предварительно скомпилированного заголовка и проанализирован вместе с каждым файлом .CPP.

6 голосов
/ 27 марта 2009

Одно дополнение к ответу Эндрю Шепарда. Используйте предварительно скомпилированный заголовок для файлов заголовков, которые являются внешними по отношению к вашему проекту, для файлов, которые изменяются нечасто. Если вы постоянно меняете заголовочные файлы в текущем проекте, вероятно, не стоит их предварительно компилировать.

3 голосов
/ 21 февраля 2010

Я написал статью о методах, которые сокращают время компиляции. Среди этих приемов можно найти пост скомпилированного заголовка и его применение здесь Там также есть раздел о лучших практиках, которые могут вас заинтересовать. Сценарии CMake, которые обрабатывают это прозрачно, включены.

0 голосов
/ 27 марта 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...