Moin! Mir ist das mit dem Make-File oft zu umständlich, deswegen verwende ich nicht immer eines. Muss ich mit größeren Nachteilen rechnen? Mir ist klar, dass es dann schwierig wird, wenn ich mehr als eine Quelldatei im Projekt habe. Aber oft habe ich da nur eine einzige. Sind Probleme zu erwarten? (Ich verwende keine IDE, übersetze immer nur per gcc-Kommando.)
Markus Weber schrieb: > (Ich verwende keine IDE, übersetze immer nur per gcc-Kommando.) und was ist an einem make Aufruf schwerer also mehre gcc befehle hintereinander aufzurufen? Compiler Umwandleln nach hex übertragen
Dann musst du halt den ganzen Rattenschwanz an Parametern für die einzelnen Tools jedesmal von neuem eintippen mit der entsprechend großen Gefahr sich dabei auch mal zu vertippen.
Irgendwer schrieb: > Dann musst du halt den ganzen Rattenschwanz an Parametern für die > einzelnen Tools jedesmal von neuem eintippen mit der entsprechend großen > Gefahr sich dabei auch mal zu vertippen. Oder er schreibt diesen Rattenschwanz in eine Batch-Datei ;-)
Ein Make erzegt auch nur eine Kommandozeile für den GCC. Man kann daher auch direkt die Kommandozeile hinschreiben. Und wenn man das in einer Batch macht, ist es auch nicht mehr Schreibaufwand. Man kann in der Batch zusätzlich DOS-Befehle ausführen, z.B. Beep oder Abbruch bei Fehlern. Markus Weber schrieb: > Mir ist klar, dass es dann schwierig wird, wenn ich mehr als eine > Quelldatei im Projekt habe. Man kann auch einfach *.c übergeben, dann werden alle C-Files im aktuellen Verzeichnis compiliert und gelinkt.
Der größte Nachteil von Batch Files ist für mich, dass man damit auf Unix Systemen nichts anfangen kann. Ich benutze für alle meine Projkete immer das gleiche makefile. Da passe ich nur wenige Zeile projektspezifisch an. Deswegen ist der Aufwand vernachlässigbar. Wenn ich allerdings nur unter Windows entwicklen würde und dieses ganze Multi-Plattform zeugs für mich kein Thema wäre, dann hätte ich micht mit Make warscheinlich nie auseinander gesetzt und auch Batch Dateien benutzt.
Markus Weber schrieb: > Moin! > > Mir ist das mit dem Make-File oft zu umständlich, jetzt muss ich aber schon fragen, was an einem makefile umständlich ist. OK, voll ausgefuchste makefiles sind schon recht umfangreich. Aber: wenn sonst schon nichts anderes, dann kannst du dir mit einem makfile Tipparbeit ersparen. Ob du deine Kommandos in ein Batch-File schreibst oder in ein makfile ist letzten Endes ja egal. Ein Makefile ist im einfachsten Fall eine ganz einfache Sache. Das sind einfach nur Aufzählungen von 'Regeln' nach dem Muster
1 | Zieldatei: Quelldatei(en) |
2 | <tab>Kommando das auszuführen ist, um die Zieldatei neu zu erstellen |
ist nichts weiter angegeben, dann ist die erste vorgefundene Regel im makefile das zu erzeugende Target, d.h. dort beginnt alles. Make vergleicht einfach nur das Filedatum der Zieldatei mit den Filedaten der Quelldatei(en) und wenn eine der Quelldateie(en) neuer als die Zieldatei ist, dann wird das angegebene Kommando ausgeführt. Vorher sieht make allerdings noch nach, ob es für die jeweiligen Quelldateien selbst wieder eine Regel gibt. Das ist alles. D.h. ein makfile muss nicht mit Makros und weiß der Teufel was ausgestattet sein. Du schreibst einfach die Kommandos, die du auch jetzt ausführst in eine Datei namens 'makefile', rückst das Kommando mit einem Tabulator ein (das ist wichtig) und ergänzt davor noch jeweils eine Zeile, welches File mit diesem Kommando aus welchen anderen Files erzeugt wird. Dein bisheriges 'letztes Kommando' setzt du noch an den Anfang des Makefiles und das wars dann auch schon. DU hast dein erstes makefile erzeugt. In Zukunft kannst du dann einfach make an der Command-Line eingeben und make findet anhand der Regeln und der Filedaten raus was es zu tun gibt und führt die Aktionen aus, indem sie die von dir hingeschriebenen Kommandos genau so an die Command Line übergibt, wie es auch passieren würde, wenn du sie eintippst. Das ist der einfachste Fall der Verwendung von make. Alles darüber hinausgehende ist dann nur noch Komfortfunktion, wie zb. dass man Compilerflags nur an einer Stelle angibt anstatt in jeder Regel erneut, etc. etc. Aber wenn du die Kommandos zur Erzeugung deines HEX-Files bis jetzt händisch eingegeben hast oder die in einem Batch-File stehen, dann kannst du die genausogut auch in ein makefile schreiben. Das Aufwand ist im Falle eines Batch-Files nahezu der gleiche und im Fall einer jedes mal erneuten händischen Eingabe in die Command Line massiv weniger.
Markus Weber schrieb: > Mir ist klar, dass es dann schwierig wird, wenn ich mehr als eine > Quelldatei im Projekt habe. Aber oft habe ich da nur eine einzige. Dann sind deine Projekte entweder trivial klein, oder aber du machst keinen Gebrauch von Kapselung. Damit gestaltet sich die Wartung und die Wiederverwendung einzelner Module als schwierig. Und sobald du mehrere Dateien bzw. Module hast, machen Makefiles schon Sinn, Oder man überlasst das Ganze seiner IDE ;). Mit freundlichen Grüßen, Karol Babioch
Rene Schube schrieb: > Oder er schreibt diesen Rattenschwanz in eine Batch-Datei ;-) Ähm, ja. :-) Ich bin nämlich ziemlich faul. Danke für eure Antworten und Karl Heinz für die ausführliche Beschreibung! Viele Einsteiger (wie ich anfangs auch) werden durch die Komplexität des Muster-Makefiles erst einmal überrollt. Natürlich ist Make ein leistungsfähiges Tool, das bei großen Projekten mit zig Dateien so richtig in Schwung kommt. Für mich ist es aber zu aufwändig, ich bin ja schon zu faul, die Befehle fürs Übersetzen und Übertragen einzeln aufzurufen.
Markus Weber schrieb: > ich bin ja schon zu faul, die Befehle fürs Übersetzen und > Übertragen einzeln aufzurufen. Ein Grund mehr der für die Verwendung einer IDE spricht ;). Mit freundlichen Grüßen, Karol Babioch
Makefiles sind nicht schwer. Vielleicht etwas ungewohnt. Speziell für den Bereich avr-gcc gibt es das schnuckelige Tool mfile, das dank tcl+Tk auf so ziemlich allen Plattformen läuft und eine GUI hat. Damit können sich dann auch make-Legastheniker ein Makefile zusammenklicken. Artikel dazu: Mfile Ich mache es ähnlich wie ein Vorposter: immer das gleiche Makefile und nur die paar Zeilen anpassen, die spezifisch für das Projekt sind. XL
Axel Schwenke schrieb: > Makefiles sind nicht schwer. Richtige Makesfiles sind richtig schwer. Ich habe schon viele Leute getroffen, die meinten, make sei nicht schwierig. Aber noch keinen, der es wirklich beherrscht haette.
Axel Schwenke schrieb: > Artikel dazu: Mfile Danke! Schau ich mir mal an. Karol Babioch schrieb: > Ein Grund mehr der für die Verwendung einer IDE spricht ;). Ist ja dann noch komplexer als ein Makefile. Wenn ich überlege, was es bei Eclipse und Anjuta alles einzustellen gab... Aber ok, wenn es mal läuft, dann ist es wirklich bequem. Oben kam der Einwand zum Thema Kapselung: Völlig richtig, C sieht da Module in Form von einzelnen Dateien vor. Gibt es dazu eine Alternative? Bis jetzt realisiere ich die Kapselung durch entsprechende Namenskonventionen, die dann eben strikt eingehalten werden müssen. Ich verfolge jetzt mal den Weg mit den direkten Kommandos weiter. Bin dabei, sie in die Quelldatei reinzubasteln. Werd nachher eine Wiki-Seite dazu anlegen. Schadet ja nicht. :-) Falls sich jemand mit Windows gut auskennt, kann er gerne helfen, ich hab mehr so die Linux-Brille auf.
Markus Weber schrieb: > ich > hab mehr so die Linux-Brille auf. Dort sind Make-Files aber täglich Brot. Wenn man solche Dinge nicht automatisiert, dann schleichen sich eher oder später Fehler ein. Mit freundlichen Grüßen, Karol Babioch
Nimm AVR Studio (Windows), dort braucht man nicht viel einzustellen und für 99,9% aller Projekte reicht das.
Karol Babioch schrieb: > Dort sind Make-Files aber täglich Brot. Stimmt – ich mag sie trotzdem nicht sonderlich. :-) Falk Brunner schrieb: > Nimm AVR Studio (Windows), dort braucht man nicht viel > einzustellen und > für 99,9% aller Projekte reicht das. Dann lieber ein Makefile bauen als mit Windows arbeiten zu müssen. ;-)
Quack schrieb: > Axel Schwenke schrieb: >> Makefiles sind nicht schwer. > > Richtige Makesfiles sind richtig schwer. > > Ich habe schon viele Leute getroffen, die meinten, make sei nicht > schwierig. Aber noch keinen, der es wirklich beherrscht haette. Das beweist höchstens, daß du zu wenig oder doch zumindest die falschen Leute kennst :) Viel schwerer als das Makefile selber, sind die Abhängigkeiten von der Umgebung. GNU make ist ja beileibe nicht die einzige Implementierung. Und dann operiert make auch nicht im leeren Raum. Die Kunst ist dann nicht, "make clean" die richtigen Files löschen zu lassen, sondern das plattformspezifische "Lösche-eine-Datei" Kommando zu verwenden. Aus diesem Grund gibt es auch so viele Projekte rund um make: cmake, GNU autotools, xmkmf. Oder Alternativen, die besser sein wollen: SCons, cook, ant uvm. Was die meisten Anfänger überfordert, ist wieviel make auch ganz alleine schon weiß. Man kann make durchaus ganz ohne Makefile verwenden:
1 | $ls |
2 | hello.c |
3 | $cat hello.c |
4 | #include <stdio.h> |
5 | int main(void) {printf("Hello World!\n");} |
6 | $make hello |
7 | cc hello.c -o hello |
8 | $./hello |
9 | Hello World! |
Daß Makefiles für µC-Programme komplexer als normal sind, liegt u.a. genau daran. Schließlich muß man make eine Menge Regeln, die es eigentlich schon kennt, neu beibringen. Weil der Compiler ein Crosscompiler ist und nicht der System-Compiler. Oder weil das Ziel ein Flash-Image ist und kein ausführbares File. etc. pp XL
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.