Когда компилятор компилирует исходный файл (например, *.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, который использует только 2% того, что находится в файле .pch, то оставшиеся 98% будут добавлены в соответствующий файл .o в?