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.
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.
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...
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.