Forum: Compiler & IDEs Make: Pfade umbiegen?


von Mark Meier (Gast)


Lesenswert?

Hallo, alle zusammen.
Ich arbeite seit kurzem mit AVR-GCC und verwende PN2 mit der
angepassten Standardvorlage von Makefile.

Da diese Vorlage alle temporären und Ausgabedateien in den selben
Ordner erstellt wie die Sourcen, wollte ich das ändern, um beim
Einchecken auf dem CVS-Server keine unnötigen Dateien zu übernehmen.

Ich habe versucht Makefile im Prj-Ordner, .c und .h-Dateien im
Src-Ordner abzulegen und temporäre bzw. Ausgabedateien in spezielle
Tmp- bzw. Out-Ordner erstellen zu lassen.

Leider klappte das nie komplett ohne Fehlermeldungen.

Hat vielleicht jemand sich damit beschäftigt und eine funktionierende
Vorlage erstellen können? Oder hat jemand einen Tipp, wie der Makefile
diesbezüglich anzupassen wäre?

Oder hat jemand einen guten Link auf die deutsche Doku zu Gnu-Make?
Englisches Originaldokument mit knapp 180 Seiten ist auch nicht ohne.

von Jörg Wunsch (Gast)


Lesenswert?

Es tut leider nicht so ohne weiteres...  Eric Weddington hatte mal
einen Versuch gemacht, das zu implementieren, aber es war sowas von
nichttrivial, dass er das dann doch nicht mehr in die letzte Version
von WinAVR aufnehmen wollte.  Wenn man Tools wie automake zu Hilfe
nimmt, die dann ins generierte Makefile komplette (relative) Pfade
schreiben, geht das natürlich, aber das ist eine mächtige Kanone für
diesen Spatzen.

Hmm, ins CVS einfach so neue Dateien aufnehmen?  Das würde ich nun
wieder nicht machen. ;-)

Das einfachste, was du gegen dein Problem aber tun kannst ist, dass du
dir eine .cvsignore-Datei mit anlegst, in die du alle Dateinamen
aufnimmst, um die sich CVS nie kümmern soll, also so ungefähr:

*.o
*.hex
*.lss
*.sym
*.elf

etc. pp.  .cvsignore selbst darf natürlich ruhig mit ins CVS.  Danach
sollte auch ein »cvs add *« keine dieser Dateien mehr mit aufnehmen.

von Mark Meier (Gast)


Lesenswert?

Es ist schon mal vorgekommen, dass temporäre Dateien zusammen mit neuen
Source-Dateien eingecheckt wurden (kann ja immer passieren).

Zudem muss ich mich bei den AVR-Projekten an die bestehende
Projekt-Stukturen halten. Und übersichtlicher ist es auch (zumindest
wenn man an diese Projektunterteilung gewohnt ist). Es muss eben zum
bestehenden Workflow passen.

Danke für den Tipp mit der .cvsignore-Datei! Ich werde es bestimmt
demnächst ausprobieren.

Ich habe gedacht, dass die meisten passen ihre Makefiles an. Es scheint
aber, dass es genau umgekehrt ist. Na ja hätte sein können.

Ich hätte es auch mit automake versucht. Aber es benötigt wiederum
autoconf, was aber unter Windows nicht einsetzbar ist.
Muss mich eben weiter umsehen und mit make beschäfigen...

von Jörg Wunsch (Gast)


Lesenswert?

Nur so: das grundlegende Problem ist, dass du eigentlich für jedes
Kommando auch in das build-Verzeichnis wechseln musst, damit du dir
sicher sein kannst, dass auch wirklich alle (vorhergesehenen und
unvorhergesehenen) generierten Dateien dort hinfallen (einschließlich
Coredumps etc. pp.).  Dann musst du aber den Zugriff auf den Quellcode
mit expliziten Pfadangaben versehen.

von Mark Meier (Gast)


Lesenswert?

Das habe ich mir auch so gedacht. Pfade mehr oder weniger fest vorgeben
und mit Dateinamen zusammen übergeben.

Was die unvorhergesehenen Dateien angeht, so rechne ich hier nicht mit
Problemen. Welche Dateien bei "normalen" Projekten erzeugt werden
sieht man schon bei ersten Beispielprojekten (.o, .o.d, .elf, .hex,
.lss, .lst, .map, .sym, .eep) und diese sind in der Makefile-Vorlage
schon erfasst. Wenn man selbst irgendwelche Extras verwenden will, dann
muss dass natürlich berücksichtigt werden.

So weit die Theorie. In der Praxis allerdings wurden meine
Pfad-Anpassungen von make noch nicht komplett akzeptiert. Ich muss noch
rausfinden wie ich z.B. "$(<:.c=.lst)" richtig anpasse und noch einige
andere Stellen.

Ein Makefile (nich auf der Basis von der WinAVR-Vorlage) habe ich schon
so weit bekommen. Da ist allerdings lange nicht alles das enthalten, was
in der umfangreichen Vorlage zu finden ist. Aber nach und nach werde ich
es schon hinkriegen.

Jedenfalls, danke für die Antwort.

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.