mikrocontroller.net

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


Autor: Thorsten (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: -daniel- (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Berndt Brandes (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.