Vorkompilierte Header

Da ich erst kürzlich mit der Einbindung eines vorkompilierten Headers (precompiled header) zu kämpfen hatte, gebe ich hier einen kurzen Abriss worauf zu achten ist.

Warum Vorkompilierte Header?

Vorkompilierte Header sparen Zeit beim Kompiliervorgang. Bei größeren Projekten oder generell bei Projekten, die viele Abhängigkeiten einbinden, macht sich das signifikant bemerkbar. Code, der durch den Entwickler selbst nicht verändert wird kann einfach direkt wieder verwendet werden – ohne Neukompilierung.

Erstellen eines vorkompilierten Headers

1. Anlegen einer Datei, die als vorkompilierter Header dienen soll. Standardname (aber keine zwingende Konvention!) ist stdafx.h.

2. Inkludieren aller Header-Dateien, die vorkompiliert genutzt werden sollen. Alle Header, die sich zur Entwicklungszeit des Projektes nur selten oder gar nicht ändern (z.Bsp. Projekte von Dritten), sollten per Präprozessor #include „aHeaderFile.h“ in der gerade angelegten stdafx.h eingebunden werden.

3. Anlegen einer .cpp Datei, welche den vorkompilierten Header (stdafx.h) inkludiert. Standardname (aber ebenfalls nicht zwingend!) ist hier stdafx.cpp. Sie enthält nur eine Zeile Sourcecode: #include „stdafx.h“. (Kommentare sind in der Datei natürlich erlaubt)

4. Vorkompilierten Header aus stdafx.cpp erzeugen: Rechtklick auf die Datei stdafx.cpp und bei Eigenschaften/Vorkompilierte Header oben Vorkompilierten Header erstellen (/Yc) auswählen. Eine Zeile darunter sollte StdAfx.h bereits als Namen für den vorkompilierten Header eingetragen sein. Wurde ein anderer Name für die Datei verwendet ist dieser hier einzugeben!

5. Einbinden des erstellten vorkompilierten Headers: Es gibt zwei Möglichkeiten – entweder man fügt jeder .cpp Sourcecodedatei als erste Anweisung #include „stdafx.h“ hinzu oder man erzwingt die Inkludierung über die Eigenschaftsseite des Projektes. Dazu findet man bei Projekt/Eigenschaften/C++/Erweitert Includes erzwingen. Hier trägt man den vorkompilierten Header ein – im Standardfall: stdafx.h.
In der Befehlszeile findet sich diese Einstellung unter /FI „stdafx.h“ wieder.

6. Verwenden des vorkompilierten Headers: Die erzwungene Inkludierung des Headers reicht nicht aus um den header tatsächlich während des Kompilierens zu nutzen. Für jede Quellcode Datei (.cpp) muss dies mit Rechtsklick auf die Datei bei C/C++ / Vorkompilierte Header mit Verwenden (/Yu) aktiviert werden.

Achtung: Vorkompilierte Header sind nur auf der Maschine gültig auf der sie erstellt wurden. In Projekten mit Sourcecodeverwaltung sollte man diese nicht einchecken.

Mehr Wissen:

Microsoft Visual Studio – Precompiled Headers
Microsoft Visual Studio – Force Includes

Autor:    Michael Keutel | 04.03.2013