Когда компилятор компилирует исходный код (например, *.cpp
) файл, он создает объектный файл (например, *.o
), так что позже он будет связан с другими .o
а также .so
(.lib
файлы для Windows) и будут представлять собой исполняемый файл.
Теперь для аналогичной ситуации не компилировать заголовочные файлы каждый раз, когда он создает некоторые .файлы pch тогда он будет связан с компоновщиком.
Теперь, если в рамках проекта Visula Studio определен предварительно скомпилированный заголовок, то почему Visual Studio жалуется на ошибку (например, **fatal error C1010: unexpected end of file while looking for precompiled header. Did you forget to add '#include "stdafx.h"' to your source?**
) что файл заголовка не включен в файл .cpp.
Подводя итог, вот мои вопросы:
Почему в каждом файле .cpp нужен предварительно скомпилированный заголовок проекта?
Потому что ты просил об этом. Если вы не хотите использовать его, вам нужно изменить параметр для файла .cpp. Щелкните правой кнопкой мыши, Свойства, C / C ++, Предварительно скомпилированные заголовки, «Создать / использовать» = «Не использовать предварительно скомпилированные заголовки». Значением по умолчанию является «Использовать». Там мало смысла в этом.
Как предварительно скомпилированный заголовок в каждом модуле компиляции оптимизирует процесс компиляции?
Не анализируя #includes. Особенно полезно, когда вы #include <windows.h>
, Экономия времени составляет порядка нескольких секунд, в больших проектах с сотнями файлов .cpp, что в сумме составляет несколько минут. На сегодняшний день это самый дешевый способ ускорить компилятор без потери качества сгенерированного кода.
тогда остальные 98% будут добавлены в соответствующий файл .o в?
Конечно, нет.