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 #defines 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измененный заголовок). Я боюсь даже думать о тех сложностях, которые на самом деле подразумевают предварительно собранные заголовки, чтобы скрипт сборки перестраивал их каждый раз, когда это необходимо.

Ответы на вопрос(1)

Ваш ответ на вопрос