[MSVC]HOWTO - Verwendung von vorkompilierten Headern



  • Einleitung

    Jeder, der einmal an einem großen Projekt gearbeitet hat, kennt das:
    Die Kompilierzeit steigt und steigt. Und das liegt nicht zuletzt an der mitsteigenden Anzahl der Headerdateien die eingebunden werden müssen. Und viele dieser Dateien wiederholen sich auch, da sie für jede .c/.cpp Datei extra benötigt werden.
    Diese Zeit kann man unter VC++ (und auch anderen Compilern) drastisch senken. Mit vorkompilierten Headern.

    Setup

    Erstmal brauchen wir 2 Dateien: stdafx.h und stdafx.cpp. Diese werden zwar standardmäßig erstellt, viele verwenden aber oft leere Projekte. Diese Dateien können btw heissen wie Ihr wollt, der MSVC verwendet diese Namen nur eben als Standard.
    Sollten sie nicht im Projekt bestehen, erstellt sie und fügt sie hinzu.

    Die Einstellungen

    Macht nun folgendes:
    Eigenschaften des Projekts -> C/C++ -> Vorkompilierte Header.
    Dort wählt Ihr in der oberen Spalte "Vorkompilierte Header verwenden".
    In der nächsten Spalte schreibt Ihr rein: stdafx.h
    Dann auf ok klicken.

    Jetzt wählt Ihr die Datei stdafx.cpp. Auch dort
    Eigenschaften -> C/C++ -> Vorkompilierte Header
    Dort ändert Ihr nun die erste Spalte auf "Vorkompilierte Header erstellen".
    Sonst lasst Ihr alles gleich.

    Inhalt der Dateien

    stdafx.h

    Hier schreibt ihr alle Header rein, die Ihr verwendet. Allerdings empfehle ich, nur konstante Header zu verwenden, also eben jene aus der STL oder anderen API. Ansonsten wird das Projekt zu oft neu kompiliert, was den SpeedBonus wieder zunichte macht. Den include-guard natürlich nicht vergessen.

    stdafx.cpp

    In diese Datei schreibt Ihr nur

    #include "stdafx.h"
    

    rein. Sonst nichts.

    In die restlichen .cpp Dateien eures Projekts muss jetzt als erstes include die stdafx.h rein, damit das richtig funktioniert. Das kann bei einem größeren Projekt etwas Arbeit werden, aber es lohnt sich.

    Fazit

    Wie man sehen kann, ist das ziemlich einfach. Aber es ist gleichzeitig auch ziemlich mächtig. So konnte ich die BuildZeit bei meinem aktuellen Projekt mit 13.000 Zeilen Code (ohne Kommentare) und knapp 105 .cpp Dateien von 1 Minute 20 auf 10 Sekunden drücken, wenn der vork. Header gebaut ist.

    Ich hab das hier mal zusammengefasst, in der Hoffnung, dass es jemand was nutzt. Bei Fragen/Kritik immer los ;).
    rya.


Anmelden zum Antworten