Header-Dateien mit der Befehlszeilenoption einschließen?

78

Ist es möglich, zusätzliche Header-Dateien anzugeben, die über die Befehlszeile aufgenommen werden sollen (mit GCC 4 / C ++)?

Oder gibt es eine andere Möglichkeit, Dateien einzuschließen, als mit #include?

Hintergrund: Ich versuche, eine große Codebasis auf meinem eigenen PC zu kompilieren. Der Code wird normalerweise in einem Cluster mit einem komplizierten Build-System (SoftRelTools?) Kompiliert, das mit dem Betriebssystem verflochten ist, sodass es praktisch unmöglich ist, ihn an einem anderen Ort zu installieren (buchstäblich Hunderte von Makefiles und Shell-Skripten und schwer codierte Pfade zu Netzwerklaufwerken). Der eigentliche Code ist jedoch ziemlich einfach und lässt sich gut kompilieren, ABER es fehlen viele Includes (meistens a la " include <vector>" und " include <math.h>"). Ich vermute, das Build-System kümmert sich normalerweise darum, aber ich muss den Code durchgehen und die Includes manuell hinzufügen, was ich lieber vermeiden möchte.

jdm
quelle

Antworten:

88

Ich habe die Option -include gefunden. Willst du das?

-include Datei

Verarbeiten Sie die Datei so, als ob "#include" file "" als erste Zeile der primären Quelldatei angezeigt würde. Das erste Verzeichnis, nach dem nach einer Datei gesucht wird, ist jedoch das Arbeitsverzeichnis des Präprozessors anstelle des Verzeichnisses, das die Hauptquelldatei enthält. Wenn es dort nicht gefunden wird, wird es wie gewohnt im Rest der Suchkette "#include" ... "" gesucht.

Wenn mehrere Einschlussoptionen angegeben sind, werden die Dateien in der Reihenfolge angezeigt, in der sie in der Befehlszeile angezeigt werden.

foraidt
quelle
8
Zu Ihrer Information: Die Funktion -include soll in erster Linie vorkompilierte Header unterstützen. Auf diese Weise können Sie Ihre .pch-Datei in alle Ihre Quelldateien einfügen, ohne jede einzelne bearbeiten zu müssen.
Gavinb
4
Vielen Dank! Obwohl ich RTFM (M = manpage) gemacht habe, habe ich das verpasst. Ich dachte auch, dass PCHs nur eine Visual C ++ - Funktion sind ... aber es scheint, dass dies das ist, was sie im Build-System verwenden ...
JDM
1
Das entsprechende Befehlszeilenargument für Visual C * wäre für den /FIFall, dass jemand Builds portieren muss, die dies verwenden.
PypeBros
etwas ähnliches für #include <Datei> (spitze Klammern)? Um genauer zu sein, ich bin an Clang-Unterstützung interessiert
4ntoine
Fantastisch. @gavinb Ich habe dies für einen Baremetal-Anwendungsfall verwendet, als ich einige der libc-Header durch einige ersetzte Funktionen und / oder Erweiterungen meines libc-Codes ergänzen musste. Mein gesamter Code kann weiterhin Standard-Header für Prototypen verwenden, enthält jedoch auch einige zusätzliche Definitionen, die ich benötige, damit sie auf meiner Plattform funktionieren.
Sherellbc
30

Aus dem gcc-Handbuch:

-include Datei

Verarbeiten Sie die Datei so, als ob " #include "file"" als erste Zeile der primären Quelldatei angezeigt würde. Das erste Verzeichnis, nach dem nach einer Datei gesucht wird, ist jedoch das Arbeitsverzeichnis des Präprozessors anstelle des Verzeichnisses, das die Hauptquelldatei enthält. Wenn es dort nicht gefunden wird, wird es wie gewohnt im Rest der Suchkette gesucht #include "...".

Wenn mehrere Einschlussoptionen angegeben sind, werden die Dateien in der Reihenfolge angezeigt, in der sie in der Befehlszeile angezeigt werden.

YuppieNetworking
quelle
11

Laut gcc-Dokumentation würde der Befehlszeilenschalter "-include file" den Job erledigen.

Tibur
quelle