Пожалуйста, помогите, у меня есть несколько вопросов: что такое предварительно скомпилированные заголовки? как они используются? как сделать один? а как включить один?
Прекомпилированные заголовки (для краткости PCH) — это то, что поддерживают некоторые компиляторы. Поддержка и то, что они содержат [помимо «чего-то, что, мы надеемся, могут быть прочитаны быстрее, чем исходный заголовочный файл»], должен решать каждый производитель компилятора. У меня есть немного понимания того, как Clang делает свои предварительно скомпилированные заголовки, и это в основном двоичная форма «разобранного» кода C или C ++ в заголовке — так что он создает один файл, который не нуждается в синтаксическом анализе [к тому же уровень как сам файл заголовка].
Цель состоит в том, чтобы уменьшить время компиляции. Тем не менее, по моему опыту, долгая часть компиляции — это, как правило, генерация кода с оптимизацией. Однако в некоторых случаях, особенно когда задействовано множество файлов заголовков, время чтения и анализа файлов заголовков может быть заметной частью общего времени компиляции.
Вообще говоря, как они используются, вы сообщаете компилятору, что вы хотите предварительно скомпилированный заголовок, и для каждой компиляции компилятор будет генерировать предварительно скомпилированный заголовок, если он еще не существует, и считывает его, когда он присутствует [1] — обычно это делается для одного именованного заголовочного файла, который включает в себя множество других вещей. Microsoft Visual Studio обычно имеет файл с именем "stdafx.h"
это предварительно скомпилировано — и, по крайней мере, в случае продуктов MS, это должен быть первый файл, включенный в проект [это так, что никакой другой заголовочный файл, например, не изменяет значение некоторого макроса — я ожидаю, что есть хэш определений макросов компилятора / командной строки, поэтому, если одно из этих изменений изменяется, PCH перекомпилируется].
Идея состоит не в том, чтобы включать каждый отдельный заголовочный файл в этот один предварительно скомпилированный файл, а в заголовочные файлы, которые используются в файлах MOST и которые не изменяются часто (PCH необходимо восстановить, если он изменился, если изменились предварительно скомпилированные файлы так что нет смысла делать это, если вы продолжаете часто менять заголовочные файлы). Конечно, как и любая другая зависимость сборки, все, что использует предварительно скомпилированный заголовок, необходимо будет перестроить, если изменился PCH.
Чтобы точно узнать, как это использовать, вам нужно прочитать документацию по используемому вами компилятору.
[1] Если ничего не изменилось, требуется его восстановление.Других решений пока нет …