GCC и предварительно скомпилированные заголовки
После прочтенияэта хорошая статья (Уход и подача предварительно скомпилированных заголовков), у меня есть некоторые сомнения относительно того, как они могут реально работать в реальной жизни. В частности, как я могу узнать, что мне нужно запустить пересборку предварительно скомпилированного заголовка в следующих сценариях:
I decide to#define
something in one of my .cpp files that alters the way the pre-processor interprets some headers that are already included in my pre-compiled header
I include another header in one of my .cpp files which #define
s a specific pre-processor directive that alters the way the pre-processor interprets a header already included in the precompiled header
Even worse, the previous issue can happen recursively, when certain headers #include
other headers
Если использование предварительно скомпилированных заголовков обеспечивает определенный стиль кодирования, такой как ограничение количества заголовков, включенных в файлы .cpp, до одного и никогда#define
Вещи в файл .cpp?
Хотя компилятор Microsoft, вероятно, неплохо справляется с предварительно скомпилированными заголовками (применяя некоторые специфичные для MS вуду), потому что, насколько я знаю, он обеспечивает/Yc
а также/Yu
опций, которые должны выполнять всю работу по сантехнике, для GCC кажется, что эта функциональность требует много ручной работы и творчества в Makefile, и я не смог найти шаблон, который должен был бы устранить все ловушки использования предустановленных скомпилированные заголовки.
Например, если у меня есть проект, который собирает несколько библиотек, чтобы не перестраивать их все после каждого изменения, я должен использовать несколько очень симпатичныхsed
tricks в Makefile, чтобы обнаружить, если один из заголовков#include
д текущей библиотекой был изменен (или#include
измененный заголовок). Я боюсь даже думать о тех сложностях, которые на самом деле подразумевают предварительно собранные заголовки, чтобы скрипт сборки перестраивал их каждый раз, когда это необходимо.