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


von Santiago (Gast)


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.

von Bernhard M. (boregard)


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?

von Santiago (Gast)


Angehängte Dateien:

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).

von yalu (Gast)


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
1
depend:

durch
1
depend: $(SRC) $(ASRC)

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

durch
1
    $(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.

von Santiago (Gast)


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 :)

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.