2009-06-04 14 views
0

Ich benutze g ++ auf Ubuntu mit einer C++ - Bibliothek, deren Header-Dateien alle enden in .H anstelle der traditionellen .h..h und .H Header-Dateien in g ++

Ich würde lieber nicht das Include-Verzeichnis ändern ... sonst würde ich wahrscheinlich nur symbolische Links zu .h-Versionen der Header erstellen.

Ich frage mich, ob es eine einfache Möglichkeit g ++ automatisch erkennen zu erkennen, dass .H und .h Dateien die gleichen sind, so dass ich entweder header.h oder header.H in meinem Programm schreiben kann? Ich habe die g ++ man-Seite durchgesehen, aber es ist ziemlich schwer für mich zu sagen, ob sie ein Feature wie dieses unterstützt.

+0

GCC kümmert sich nicht, was die Header genannt werden. Sie könnten überhaupt keine Erweiterungen haben oder als .txt oder .c oder .etwas-völlig-nicht-verknüpft genannt werden, und #include funktioniert immer noch. – ephemient

Antwort

2

Ich denke, das ist ein Implementierungsdetail des Linux-Dateisystems. Während auf Windows-Dateien .h und .H die gleiche Wirkung haben, können Sie unter Linux eine Datei traditional.h und eine Datei traditional.H im selben Verzeichnis speichern.

Wenn ich Sie richtig verstehe, müssen Sie nur das Großbuchstabe H in den Dateien angeben, die Ihre Header enthalten.

3

Das Problem stammt aus dem Dateisystem. Ihr Dateisystem unterscheidet zwischen Groß- und Kleinschreibung und sieht daher einen Unterschied zwischen header.h und header.H. Dies ist kein g ++ Problem. Wenn Sie auf einem case-insensitiven Dateisystem/Betriebssystem arbeiten, sehen Sie dieses Problem nicht, wie es bei der Ausführung von g ++ auf einem win32-System der Fall ist.

7

.H ist ein Weg, dass C++ - Header-Dateien deutlich von C-Header-Dateien (auch. Hpp oder. Hxx) benannt werden. Dies funktioniert nur bei Groß- und Kleinschreibung von Betriebssystemen.

Wenn die Datei eine .H hat, nur #include <file.H>

2

Wenn Sie Ihre Quelle # include .H Dateien nicht die Header-Dateien umbenennen möchten, oder haben Sie eine Reihe von H-Dateien erstellen können, die nur #enthalten Sie die entsprechende .H-Datei.

2

ich nicht jeder einfache Möglichkeit denken kann gcc zu bekommen Groß- und Kleinschreibung zu werden, so dass Sie vielleicht Ihre Zähne zusammenbeißen und verwenden eine alternative Lösung haben, wie

#include "foo.H" 

... oder einige erstellen symbolische Verbindungen:

# create .h links to all .H files below the current dir 
for basename in `find . -name *.H | sed 's/\(.*\)\..*/\1/'`; do 
    ln -s $basename.H $basename.h 
done 

FYI, dort ist a recent thread on the gcc mailing list requesting case-insensitivity. Die Antworten beziehen sich hauptsächlich auf Effizienz - wenn Sie den Compiler bitten, nach allen Versionen von "foo.h" zu suchen (zB "FOO.H", "Foo.H", "foo.H"), dann werden Sie das tun häufiger auf die Festplatte zugreifen. Und wer braucht noch längere Bauzeiten? :)