mikrocontroller.net

Forum: Compiler & IDEs Wie kann ich gcc beibringen, VPATH bei "make depend" zu verwenden?


Autor: Santiago (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

inzwischen arbeite ich hauptsächlich unter linux und habe mir dort (in 
Analogie zu WinAVR) angewöhnt, ein Unterverzeichnis für die make-Datei 
und die  binär-Erzeugnisse anzulegen.
Bei mir heißt sie "nix". Im Makefile habe ich die Variable VPath auf 
".." gesetzt.

Das funktioniert soweit auch ganz gut, nur habe ich keine Abhängigkeiten 
zu den Headern, d.h. wenn ich merke, dass ein make nix macht, muss ich 
einen "make -B" hinterher schicken.

Das würde ich gerne ändern, kann es alleine jedoch nicht.

Autor: Bernhard M. (boregard)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
GCC ist das egal, Du must halt die Abhängigkeiten im Makefile auch 
richtig haben..mit den richtigen Pfaden.

Wie sieht das Makefile denn aus?

Autor: Santiago (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Bernhard,

> GCC ist das egal, Du must halt die Abhängigkeiten im Makefile auch
> richtig haben..mit den richtigen Pfaden.

Schon klar, nur mag ich nicht jedesmal die make-datei anpassen, wenn ich 
nen neuen Header erzeuge oder wenn ich einen include hinzufüge. Deshalb 
wollte ich das "make depend" zum Laufen bekommen.

Beim WinAVR scheint es ja auch zu klappen.

Vielleicht läßt sich ja eine Regel zufügen oder anpassen, sodass GCC die 
Dateien auch findet.

> Wie sieht das Makefile denn aus?

Ich habe mir mit MFile mal eine Makedatei erfinden lassen. Dann habe ich 
die Optionen passend zu einigen Freds aus diesem Forum angepasst und 
seither kopiere ich den für neue Projekte und ändere nur noch den 
Kopfbereich (Zeilen 8-16).

Autor: yalu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
VPATH wird nur von make, nicht aber vom avr-gcc ausgewertet, deswegen
findet der Compiler die Dateien nicht. Du kannst aber folgendes tun:

In Zeile 221
depend:

durch
depend: $(SRC) $(ASRC)

und in Zeile 230
    $(CC) -M -mmcu=$(MCU) $(CDEFS) $(CINCS) $(SRC) $(ASRC) >> $(MAKEFILE)

durch
    $(CC) -M -mmcu=$(MCU) $(CDEFS) $(CINCS) $^ >> $(MAKEFILE)

ersetzen. Dann bekommt der Compiler von make die richtigen Pfade
geliefert.

Statt der Option -M kannst du auch -MM verwenden, dann wird die
Dependency-List nicht ganz so lang, da die Standard-Header-Files, die
sich normalerweise nicht ändern, ausgespart werden.

Autor: Santiago (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
yalu, Du bist mein Held :)

Danke sehr. Genau das habe ich gesucht.
Der Tip mit -MM gefällt mir auch sehr gut!

Habe noch ein virtuelles Target zugefügt, sodass "make depend" bei einer 
Änderung der make-Datei automatisch ausgeführt wird ...

Langsam wird's rund :)

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.