Forum: Compiler & IDEs Anleitung für makefile


von Arnd Flemmer (Gast)


Lesenswert?

Da mein Englisch anscheinend nicht ausreicht:
Wo finde ich eine deutsche Anleitung, um ein makefile zu erstellen?

Ich habe jetzt eins von der WinAVR-Installation genommen und einfach
den Dateinamen und Controller geändert.

Allerdings schaffe ich es jetzt nicht mein Programm auf verschiedene
Dateien aufzuteilen (LCD, UART, ADC usw).

Bei den GCC-Beispielen habe ich auch schon geschaut, allerdings sind
die makefiles von einem anderen Format(?).

Ich suche eigentlich nur ein simples makefile, und am besten mit
Erklärungen für die einzelnen Optionen.

MfG Arnd

von Joerg Wunsch (Gast)


Lesenswert?

Nun, so schlecht kommentiert ist doch das WinAVR Beispiel-Makefile nun
wirklich nicht.  Sorry, aber wenn Dein Englisch dafür nicht reicht,
wie willst Du dann die Datenblätter des AVR verstehen?  Deren
Verständnis ist praktisch die Grundlage für ein erfolgreiches
Arbeiten...

# List C source files here. [...]
SRC = $(TARGET).c

Was braucht es noch an Erklärung?  Der Makro SRC bekommt die Namen der
C-Quelldateien zugewiesen, wobei die Standardeinstellung der
Projektname [$(TARGET)] mit angehängtem .c ist.  Weitere Dateinamen
sind dort einfach dranzuhängen.  Falls Du $(TARGET).c nicht haben
möchtest (weil Du z. B. stattdessen ein main.c hast), dann lösch es
einfach.

Ein weiteres Beispiel folgt stehenden Fußes:

# If there is more than one source file, append them above, or modify
and
# uncomment the following:
#SRC += foo.c bar.c

Damit kannst Du den Makro SRC um weitere Elemente ergänzen, die in
einer eigenen Zeile stehen (mußt natürlich das # ganz vorn entfernen),
so daß Du mehr als eine Zeile mit Dateinamen haben kannst.  Alternativ
gilt generell für Makefiles, daß man mit einem Backslash unmittelbar
am Zeilenende kennzeichnet, daß die folgende Zeile logisch zu dieser
dazugehört -- ganz genau, wie das übrigens auch in C der Fall ist.
(Wo `make' das wohl hergenommen hat? ;-)

von Stefan (Gast)


Lesenswert?

Naja, ein Makefile erstellen musst Du ja gar nicht ... es gibt ja schon
eins!

Einfach das fertige Makefile aus WinAVR\sample in Dein
Projektverzeichnis kopieren und dort Deine Sourcen eintragen, wie Jörg
schon geschrieben hat.

An der Stelle wollte ich mal ein ganz großes Lob an Eric und Jörg
loswerden: besser als hier kann man ein Makefile eigendlich garnicht
machen. Vor allem die automatische Erkennung von Abhängigkeiten
zwischen den Files hat mir gefallen:

# Automatically generate C source code dependencies.

Das bedeutet, sobald ein .h File geändert wird, werden automatisch alle
.c Files, die dieses benutzen, neu compiliert. In vielen Makefiles sind
diese Abhängigkeiten von Hand eingetragen, was zu garstigen Fehlern
führt, wenn sie nicht mehr ganz aktuell sind.

Was das Englisch betrifft:
Englisch ist für MC/Elektronik so essentiell wie Maus bedienen für den
Computer, klar gehts auch ohne ...

Stefan

von AndreasH (Gast)


Lesenswert?

Hier :
http://rfhs8012.fh-regensburg.de/~opel/docs/makefiles.php

gibt es eine Anleitung zur Erstellung eines Makefiles in Deutsch

von Joerg Wunsch (Gast)


Lesenswert?

OK, ich weiß zwar, daß Programmer's Notepad künftig eine
Projektverwaltung plant, die auch Makefile generieren können soll, und
daß darin auch Eric Weddingtons Hoffnungen für WinAVR liegen.

Da das aber noch ein Weilchen dauern kann und da ein kleines Tool auch
nicht-WinAVR-Nutzern die Arbeit erleichtern kann, habe ich mal ein
schnelles Projektchen gemacht für einen Makefile-Generator speziell
für AVR-GCC.  Das soll ausdrücklich keine eierlegende Wollmilchsau
sein oder werden, es ist auch keine großartige Weiterentwicklung mehr
geplant.  Andererseits wollte ich mich nicht ausschließlich auf
Eric's
Makefile template festlegen (das für dieses Projekt sowieso leicht
modifiziert worden ist), sondern es sollen auch ähnliche Varianten
beispielsweise für Unix-Nutzer (wie mich selbst :) als Eingabe
akzeptiert werden.

http://www.sax.de/~joerg/mfile/

Eric Weddington wird das sicherlich ins nächste WinAVR mit einbauen,
aber das ist noch ein wenig hin.

von Peter D. (peda)


Lesenswert?

Man braucht kein Makefile, man kann doch den AVRGCC auch direkt von der
Kommandozeile aufrufen (vorzugsweise in einer Batch).

Mit dem Sourcefilename "*.c" sagt man ihm dann einfach, daß er
sämtliche C Files im aktuellen Verzeichnis zusammenlinken soll.

Und mit dem Schalter -xc verhindert man Fehler in der DOS-Box, da dort
"*.c" zu Großschrift expandiert wird.

Diese Batch kann dann universell für alle Deine Projekte verwendet
werden. Lediglich der MCU-Typ muß noch entsprechend eingetragen
werden.

Man kann aber auch den MCU-Typ einer Umgebungsvariable zuweisen und
diese dann in der Batch dem AVRGCC übergeben.


Peter

von Joerg Wunsch (Gast)


Lesenswert?

> Man braucht kein Makefile, man kann doch den AVRGCC auch direkt von
> der Kommandozeile aufrufen (vorzugsweise in einer Batch).

Peter, ich weiß, daß Du diese Variante bevorzugst, kannst Du ja auch
gern tun.  Aber die Urväter von Unix haben vor ca. 20 Jahren bereits
gemerkt, daß das nicht der Stein der Weisen ist, daher gibt's
`make'.
Es ist ein Stückchen flexibler als ein reines Script (das haben die
Unixer nämlich vor `make' ebenfalls benutzt), und der vorliegende
Makefile-Generator dient vor allem auch dazu, die möglichen Knöpfe für
die Compilierung einzustellen.  Das Problem hast Du nämlich auch mit
Deinem Script immer noch: Du mußt Dir all Deine Optionen jedesmal aufs
Neue zusammensammeln.

von Peter D. (peda)


Lesenswert?

@Joerg,

ich hatte es auch nicht als EiWomiSa angesehen sondern nur als
Schnellschuß, um sofort mit WINAVR loszulegen.

Wenn man da noch viele spezielle Optionen angeben will, wird ja
irgendwann das DOS-Zeilen-Limit unbarmherzig zuschlagen.

Aber bisher ist die einzige Option, die ich ändere, der MCU-Typ.


Peter

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.