Улучшения скорости компиляции включают защиту от предварительно скомпилированных заголовков - PullRequest
2 голосов
/ 18 ноября 2011

Я хочу сократить время компиляции в большом проекте.Наш основной компилятор - Visual Studio 2010, но часть кода компилируется в gcc.В настоящее время мы планируем убедиться, что во всех наших .h-файлах есть как защита, так и #pragma, это позволит Visual Studio и gcc повысить скорость компиляции.Ранее мы добавили больше заголовков в stdafx, но мы видели недостатки: если один из этих заголовков был изменен, и вы скомпилировали cpp без перекомпиляции предварительно скомпилированного заголовка, изменения не вступили в силу.Это часто вызывало у нас путаницу.Текущий план состоит в том, чтобы использовать предварительно скомпилированные заголовки для всех стабильных заголовков или заголовков вне нашего контроля (они не изменятся), а для всего остального используйте один раз защитники включения и #pragma, чтобы повысить скорость компиляции.Есть ли причина, по которой этот путь плохо спланирован?Есть ли преимущество для скорости компиляции в том, что include guards / # pragma один раз против предварительно скомпилированного заголовка или наоборот, что мне не хватает?

1 Ответ

2 голосов
/ 18 ноября 2011

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

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

Я не фанат предварительно скомпилированных заголовков, поэтому я просто гарантирую, что я включаю все, что нужно, включая и не включаю ничего, что не«т .

...