Да, есть лучший способ.
Проблема, IMHO, с «волшебным стилем» прекомпилированных заголовков заключается в том, что они поощряют необработанную связь и делают повторное использование кода сложнее, чем должно быть. Кроме того, код, который был написан с помощью «всего-навсего в стиле stdafx.h», подвержен болью, чтобы поддерживать, поскольку изменение чего-либо в любом файле заголовка, вероятно, приведет к перекомпиляции всей кодовой базы каждый раз. Это может сделать простой рефакторинг навсегда, поскольку каждое изменение и перекомпиляция цикла занимает гораздо больше времени, чем нужно.
Лучшим способом, опять же ИМХО, является использование #pragma hdrstop и/Yc и/Yu. Это позволяет легко настраивать конфигурации сборки, которые используют прекомпилированные заголовки, а также создавать конфигурации, которые не используют предварительно скомпилированные заголовки. Файлы, которые используют предварительно скомпилированные заголовки, не имеют прямой зависимости от предварительно скомпилированного заголовка в исходном файле, который позволяет им строить с или без предварительно скомпилированного заголовка. Файл проекта определяет, какой исходный файл создает предварительно скомпилированный заголовок, а строка #pragma hdrstop в каждом исходном файле определяет, какие из них берутся из предварительно скомпилированного заголовка (если используется) и которые берутся непосредственно из исходного файла ... Это означает, что когда при выполнении обслуживания вы будете использовать конфигурацию, которая не использует предварительно скомпилированные заголовки, и только код, который требуется перестроить после изменения файла заголовка, будет восстановлен. При выполнении полной сборки вы можете использовать предварительно скомпилированные конфигурации заголовков, чтобы ускорить процесс компиляции.Еще одна хорошая вещь о том, что опция сборки не-прекомпилированных заголовков заключается в том, что она гарантирует, что ваши файлы cpp включают только то, что им нужно, и включают все, что им нужно (что-то, что сложно, если вы используете «стиль мастера» предварительно скомпилированного заголовка.
Я написал немного о том, как это работает здесь: http://www.lenholgate.com/blog/2004/07/fi-stlport-precompiled-headers-warning-level-4-and-pragma-hdrstop.html (игнорировать материал о/FI), и у меня есть некоторые примеры проектов, которые строят с #pragma hdrstop и метод/YC/Ю. здесь:. http://www.lenholgate.com/blog/2008/04/practical-testing-16---fixing-a-timeout-bug.html
Конечно, переход от привычного использования заголовка «стиль мастера» в более управляемый стиль часто нетривиален ...
Лично я использую предварительно скомпилированные заголовки (как для обычного кода, так и для модульных тестов), но используйте имя Precompiled.h/cpp. Предварительно скомпилированные заголовки для модульных тестов включают в себя дополнительные заголовки, так что компиляция выполняется быстрее. – Daemin 2008-11-14 14:18:08
ПОЖАЛУЙСТА, ГОЛОСУЙТЕ НА ЭТО: http://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/4931119-allow-precompiled-headers-to-be-shared-between-pro – 2013-11-08 09:28:01
Да, есть лучшее путь. Для каждого исходного файла может использоваться только один предварительно скомпилированный заголовок, но pch можно указать fore * каждый * исходный файл или набор исходных файлов. Вы также можете указать, какие исходные файлы использовать или не использовать предварительно скомпилированный заголовок. См. Мой ответ ниже. – riderBill 2016-02-20 04:17:47