Forum: Compiler & IDEs .c mit Pfadangabe im Makefile einbinden


von Thorsten (Gast)


Lesenswert?

Hallo,

habe mehere Routinen mit Headerdatei angelegt. Mit
#include "xyz.h" und im makefile SRC ... xyz.c klappt es prima.

mit #include "libs_tl/xyz.h" meckert er nur das er die xyz.c Datei in
dem Makefile findet.

Wie kann ich in dem Makefile den Pfad angeben das er in SRC nicht xyz.c
sondern libs_tl\xyz.c auch findet ?

Hab schon vieles probiert ( \\ \ / absolute Pfade u.s.w) hat aber
alles nicht geholfen !

Hab ein Windows System und WinAVR.

Danke im vorraus !
Thorsten

von -daniel- (Gast)


Lesenswert?

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

von Berndt Brandes (Gast)


Lesenswert?

Lies mal im make manual
(http://www.gnu.org/software/make/manual/make.html) über
"VPATH" (4.5 Searching Directories for Prerequisites).
In meinem makefile habe ich eine Zeile:
VPATH = $(AVRCOMMON)
In meinem Environment steht in AVRCOMMON der Pfad zu einem Verzeichnis
mit c-Quellen, die eher eine Art Bibliothek darstellen, aber für jeden
AVR unter Umständen neu übersetzt werden müssen (daher keine Library).
Make sucht jetzt die unter SRC angegebenen Files zuerst im
Projektverzeichnis, sind sie da nicht, wird in VPATH gesucht. Sind sie
da, wird der Quelldateiname mit diesem vorangestellten Pfad an den
Compiler übergeben. Die .o und .lst files finden sich aber wieder im
Projektverzeichnis.

Ist so Ähnlich wie -I für den Compiler für Header, aber eben für Make
für Quelldateien.

/Berndt

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.