hi,
hmm, ich habe den Eindruck dass du Sachen durcheinander bringst.
"routinen anlegen in *.h" ... meinst du Deklarationen der Routinen?
Weil nämlich die Definitionen ({} Teil einer Funktion)
haben nichts in *.h zu suchen.
ansonsten hat xyz.h nichts mit xyz.c zu tun
xyz.h kann in hunderte andere c Dateien includiert werden.
und eine dieser Dateien ist eben xyz.c, in der
die Deklarationen implementiert werden.
Compiler nämlich interessiert sich nur für .c Dateien
und erzeugt aus diesen .o
viele (aber mindestens eine) dieser .o Dateien werden durch
Linker gebunden. Sprich wenn in xyz.h Deklaratioen steht
void useless(void);
die in xyz.c implementiert wird zu
void useless(void){ int x[1000]; /**/ }
so wird linker com Compiler erzeugten Assemlbercode
für diese wegschmeisen, wenn er keinen Aufruf zu dieser
Funktion aus anderen .o Dateien detektiert.
Jetzt zu Pfadgeschichte ...
im Makefile steht oft sowas
MY_INC_DIRS := /pool/myinclude
aber Sinn und Zweck ist nur diese Werte an Compiler weiterzureichen
gcc -I $(MY_INC_DIRS)
-I ist eine Option an gcc Compiler, die diesen veranlasst
in zusätzlichen Verzeichnissen nach .h Dateien suchen.
interessant wird es, wenn es mehrere wären. ZB
/pool/inc1/super.h
/pool/inc2/super.h
gcc -I /pool/inc1 -I /pool/inc2
Da weiss ich auch nicht wie er vorgeht.
Hope this helps