.c mit Pfadangabe im Makefile einbinden

Gast #366962
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
Gast #366963
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
Gast #366964
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

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.