PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Was ist ein makefile (bin Anfänger)



jojo.glaser
16.06.2006, 21:54
Hi

Ich wollte eine Übung zu AVRs machen und da sollte ich ein Programm auf meinen AVR laden dazu hab ich ein Quelltext bekommen und ein makefile.
Den Quelltext hab ich in mein AVR- Studio kopiert.
Was soll ich mit dem makefile machen? Für was brauch ich das?

Vielen Dank für deine Hilfe!

popi
16.06.2006, 22:32
Also, ich bin auch blutjunger Anfänger, aber soweit ich weiss stehen in dem Makefile der Prozessortyp, die verwendete Quarzfreuenz, ob eingebauter oder externer Quarz usw. .. also die initialisierung für den Compilerm damit dieser weiss, an welchen Stellen es was verschieben muss und welche Adressen zu welchen Labels passen.

Aber bitte Antwort nur mit Vorsicht genießen...
Wie gesagt, bin Anfänger!!!

Ich würde dir empfehlen, AVR-Studio von ATMEL zu benutzen.
Da ist eine AVR-GCC Oberfläche und Du musst dich um kein MAkefile kümern.
Du wählst nur Deinen Kontrollertyp an und stellt das meiste bequem über Menüs ein.

Grüße

popi

johannuhrmann
17.06.2006, 11:10
Hallo,

wenn Du Deinen Quelltext übersetzen kannst, dann kann Dir das Makefile egal sein.

Aber um Deine Frage zu beantworten, hier ein "Kurztutorial" für Makefiles:

In einem Makefile stehen grob gesagt drei verschiedene Sachen drin:
1. Dateien, die erzeugt werden sollen (z.B. das hex-File)
2. Dateien, die man dazu braucht (z.B. die Quelltextdatei)
3. was zu tun ist, um aus den Quelldateien die Zieldateien zu erstellen

Ein typischer Eintrag sieht also (vereinfacht) so aus:


meinprog.hex: meinprog.c
gcc -irgendwelchegrausamenparameter -o meinprog.hex meinprog.c


und liest sich so: Um die Datei meinprog.hex zu erzeugen, brauchst du meinprog.c. Um meinprog.hex aus meinprog.c zu erzeugen, musst Du das Kommando "gcc -irgendwel..." aufrufen

Wenn Du jetzt in dem Verzeichnis, in dem das Makefile liegt, das Programm make
startest, dann liest dieses das Makefile und versucht, die erste zu erzeugende Datei (im Beispiel meinprog.hex) zu erzeugen und wird den gcc mit den genannten Parametern aufrufen.

Der Sinn des ganzen:
1. Du kannst auch komplizierte Compile- und Ladevorgänge einmal sauber in das Makefile schreiben und musst Dir nicht die Compileraufrufe usw. auswendig merken.

2. Im Makefile können Variablen benutzt werden (anlegen mit "Variable=Wert" in einer Zeile, verwenden mit $(Variable) ). In den Variablen kannst Du z.B. den Controllertyp einmal festlegen und dann immer wieder verwenden.

3. Das Programm make erstellt eine Datei nur, wenn es sie noch nicht gibt oder eine der benötigten Dateien neuer ist als die Zieldatei. Wenn Du also das Beispiel von oben zweimal hintereinander ausführst, dann wird make erkennen, dass sich ja an meinprog.c gar nichts geändert hat und deshalb den Compiler nicht aufrufen. (wozu auch?)
Machst Du dann eine Änderung in meinprog.c, dann wird make den Compiler wieder aufrufen.

4. Wenn es eine benötigte Datei nicht gibt, dann versucht make sie anhand der Regeln im Makefile zu erstellen. Es sieht also nach, ob die benötigte Datei irgendwo als zu erstellende Datei im Makefile auftaucht.
Auf diese Art kannst Du auch komplizierte Abhängigkeiten von make automatisch auflösen lassen.

Lektüre: http://www.opussoftware.com/tutorial/TutMakefile.htm

Grüße,

Hans

P.S.:
Das Kommando (im Beispiel die Zeile, die mit gcc beginnt) muss mit einem Tabulator
eingerückt werden. Leerzeichen funktionieren nicht!