Make: Pfade umbiegen?

Gast #182492
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.
Gast #182493
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.
Gast #182494
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...
Gast #182495
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.
Gast #182496
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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 21 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.