GCC und vorkompilierte Header

Nach dem LesenDieser schöne Artikel Ich habe einige Zweifel, wie diese im wirklichen Leben tatsächlich funktionieren können. Wie kann ich in den folgenden Szenarien feststellen, dass die Neuerstellung des vorkompilierten Headers ausgelöst werden muss?

Ich entscheide mich dafür#define Etwas in einer meiner .cpp-Dateien, das die Art und Weise ändert, in der der Pre-Prozessor einige Header interpretiert, die bereits in meinem vorkompilierten Header enthalten sindIch füge einen weiteren Header in eine meiner .cpp-Dateien ein#defines Eine spezielle Präprozessor-Direktive, die die Art und Weise ändert, in der der Präprozessor einen bereits im vorkompilierten Header enthaltenen Header interpretiertSchlimmer noch, das vorherige Problem kann bei bestimmten Headern rekursiv auftreten#include andere Überschriften

Sollte die Verwendung von vorkompilierten Headern einen bestimmten restriktiven Codierungsstil erzwingen, beispielsweise die Beschränkung der Anzahl der in CPP-Dateien enthaltenen Header auf einen und niemals#defineSachen in einer .cpp-Datei speichern?

Der Compiler von Microsoft leistet wahrscheinlich gute Arbeit mit vorkompilierten Headern (durch Anwenden von MS-spezifischem Voodoo), da er meines Wissens das bietet/Yc und/Yu Optionen, die die gesamte Installation erledigen sollen. Für GCC scheint es, dass diese Funktionalität viel manuelle Arbeit und Kreativität im Makefile erfordert, und ich konnte keine Vorlage finden, die alle Fallstricke der Verwendung von kompilierte Header.

Wenn ich zum Beispiel ein Projekt habe, das mehrere Bibliotheken erstellt, um nicht nach jeder Änderung alle neu zu erstellen, muss ich einige wirklich nette verwendensed Tricks im Makefile, um festzustellen, ob einer der Header#included von der aktuellen Bibliothek wurde geändert (oder es#includes ein modifizierter Header). Ich befürchte, überhaupt an die Komplikationen zu denken, die vorgefertigte Header tatsächlich mit sich bringen würden, damit das Build-Skript sie jedes Mal neu erstellt, wenn es notwendig ist.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage