Hallo, Am Samstag, 25. Oktober 2008 schrieb Thomas Hertweck:
Folgendes Szenario:
Es sei die folgende Verzeichnisstruktur gegeben:
./include
|-> first.h |-> second.h
./src
|-> code.c
Der Quellcode code.c bindet die Datei first.h ein, diese Datei wiederum bindet die Datei second.h ein. Der Quellcode wird im Verzeichnis ./src [...]
./include
|-> first.h |-> second.h
./src
|-> code.c |-> second.h
Die Frage ist nun, welche Datei second.h wird letztendlich verwendet, wenn der Code im Verzeichnis ./src wiederum mit dem Befehl "gcc -I. -I../include" usw. uebersetzt wird. Ich haette eigentlich erwartet, dass es die lokale Datei second.h ist, die eingebunden wird. Dem ist allerdings nicht so, wie auch die von gcc ausgegebenen Abhaengigkeiten zeigen:
code.o: code.c ../include/first.h ../include/second.h
Wenn Du second.h mit #include "second.h" IN DER first.h einbindest, dann sieht gcc vermutlich das Verzeichnis ../include als aktuelles Verzeichnis - und dann ist es doch evtl. richtig, die Datei eben aus genau diesem Verzeichnis einzubinden. Das hat dann nichts mit den Compileroptionen zu tun, sondern einfach damit, dass die äußere Datei (also first.h) einfach auch in diesem Verzeichnis ist. [...]
Wenn ich ebenfalls eine lokale Kopie von first.h in ./src anlege, dann wiederum funktioniert die Sache. Ich verstehe also, was passiert und wie der Preprocessor die -I Optionen handhabt: er scheint beim Einbinden von
Genau das ist ja dann die Wirkung: wenn Du first.h eben auch im src-Verzeichnis hast, nimmt er ja dann auch die darin eingebundene second.h eben aus diesem (dann aktuelle) Verzeichnis. [...]
Die Frage ist nun: Bug oder Feature? Bzw. wer handhabt die Sache korrekt, der Preprocessor oder makedepend?
Gute Frage... Aber eigentlich finde ich das Verhalten schon ganz sinnvoll: wenn ich einen (Meta-)Header anlege, der hauptsächlich dazu dient, die vielen anderen Header einzubinden, dann will ich doch eigentlich damit auch die einzubindenden Dateien festlegen - und die sollten dann nicht davon abhängig sein, von wo aus dieser Sammelheader wiederum eingebunden wird.
Gruesse, Thomas
Gruß Martin -- To unsubscribe, e-mail: opensuse-programming-de+unsubscribe@opensuse.org For additional commands, e-mail: opensuse-programming-de+help@opensuse.org