Ответ на исходный вопрос заключается в том, что целью использования #pragma hdrstop в файле, для которого не задан ни / Yc, ни / Yu, является то, что он игнорируется, и поэтому вы можете настроить конфигурацию сборки, которая собирается без предварительно скомпилированных заголовков и других сборок. конфигурации, которые создают скомпилированные заголовки WITH, и вам не нужно менять код или заголовки, которые вообще включены для этого.
Подробнее ...
В примечаниях к MSDN говорится, что «прагма hdrstop дает вам дополнительный контроль над именами файлов предкомпиляции и местом, в котором сохраняется состояние компиляции». что верно, но не особенно очевидно, насколько именно это может быть полезно ...
В двух словах.
- Помещение #pragma hdrstop в исходный файл, который не скомпилирован с / Yc или / Yu, не имеет никакого эффекта.
- Если для файла задана опция / Yu, то hdrstop говорит компилятору выбросить все до строки, в которой появляется hdrstop, и вместо этого вставить предварительно скомпилированный заголовок.
- Если для файла задан параметр / Yc, то hdrstop означает сохранить все скомпилированное состояние для всего, вплоть до строки, в которой hdrstop отображается как предварительно скомпилированный заголовок.
Хитрость заключается в использовании / Yc и / Yu без необязательного имени файла заголовка; просто отметьте переключатель «использовать» или «создать» и оставьте поле редактирования «сквозной заголовок» пустым (или отредактируйте файл проекта ...).
Итак, у вас есть 1 файл, возможно, с именем PrecompiledHeader.cpp, который включает в себя заголовки, которые вы хотите включить в предварительно скомпилированный заголовок, и который имеет #pragma hdrstop в конце списка включаемых файлов. Этот ОДИН файл скомпилирован с /Yc.
Затем у вас есть все остальные ваши cpp-файлы с #pragma hdrstop после включаемых файлов, которые находятся в вашем предварительно скомпилированном заголовке. Эти файлы все скомпилированы с /Yu.
Это приводит к тому, что PrecompiledHeader.cpp создает ваш (в этом примере) один файл pch и все остальные файлы, используя этот единственный файл pch.
Преимущество в этом заключается в том, что НИКАКИЕ из ваших файлов не должны включать в себя «глобальный» предварительно скомпилированный заголовочный файл построения заголовка - поэтому нет stdafx.h или чего-либо еще. Это означает, что вы можете настроить конфигурацию сборки, которая собирает БЕЗ предварительно скомпилированных заголовков, где все строки #pragma hdrstop просто игнорируются.
Это «хорошо», потому что это означает, что вы можете иметь единую конфигурацию сборки «без предварительной компиляции», которая позволяет быстро разрабатывать (вы можете изменить один заголовок и НЕ заставлять мир перестраивать) и другие «нормальные» конфигурации, которые Используйте предварительно скомпилированные заголовки.