Почему форс, включая скомпилированные заголовки, работает вообще? - PullRequest
2 голосов
/ 19 февраля 2020

По-видимому, рекомендуется принудительно включать предварительно скомпилированные заголовки, чтобы источник мог использоваться с и без предварительно скомпилированных заголовков. Даже CMake использует метод принудительного включения для предварительно скомпилированных заголовков.

Однако, например, документация Microsoft MSV C гласит:

компилятор обрабатывает весь код, находящийся перед файлом .h, как предварительно скомпилированный. Он пропускает чуть дальше директивы #include, связанной с файлом .h , использует код, содержащийся в файле .pch, а затем компилирует весь код после имени файла.

и для опции /FI документация гласит:

Этот параметр имеет тот же эффект, что и указание файла с двойными кавычками в директиве #include в начале строка каждого исходного файла, указанного в командной строке, в переменной среды CL или в командном файле.

Итак, подведем итог: все включения, которые выше / раньше директива include соответствующего предварительно скомпилированного заголовка будет предварительно скомпилирована в файл PCH. Принудительное включение этого файла поместит его в первую строку файла.

Теперь у меня вопрос: как это работает вместе? Есть ли какие-то специальные логи c для файлов PCH во время сборки или я что-то упустил?

Обновление: Я также проверил g cc документацию и похоже, что g cc ищет предварительно скомпилированные заголовки для каждой найденной директивы include и, если возможно, использует предварительно скомпилированные заголовки. Итак, правильно ли я понимаю, что MSV C суммирует все, что включает в себя перед (включая сам заголовок) include, который должен использоваться для генерации предварительно скомпилированного заголовка, где g cc вместо этого генерирует предварительно скомпилированный заголовок для этого специфицированного c заголовка?

Если все верно, возникает вопрос: действительно ли g cc действительно более гибок в отношении использования предварительно сжатых заголовков и как easy это получить? повышение производительности во время компиляции из этого?

...