www.mikrocontroller.net

Forum: Compiler & IDEs Makefile, MFile & co


Autor: JarJar (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Eines meiner größten Probleme bei C ist das Makefile. Vor allem
irritiert mich das es so komplett unterschiedlich aussehende Makefiles
gibt. So sehen die Makefiles von den Examples "demo.c" und
"twitest.c" schon unterschiedlich aus. Das was das Tool "mfile"
erzeugt ist wieder anders. Ich sehe zwar Gemeinsamkeiten, tue mich aber
noch etwas schwer da komplett durchzusteigen. Bei meinen bisherigen
Exkursionen in C/C++ bin ich von Makefiles verschont geblieben.

Daher meine Fragen: gibt es ein Tutorial das am besten anhand eines
Beispiels erklärt was da wie gemacht wird?
Ist die Verwendung von dem Tool "mfile" sinnvoll oder macht's das
ganze noch komplizierter?

Soviel hab ich glaube ich von Makefiles verstanden. Erstmal werden
einige Variablen definiert die später zu Kommandozeilen
zusammengebastelt. Außerdem können diverse Tools zb zum Löschen von
überflüssigen Dateien aufgerufen werden. Effektiv ist es nix anderes
als eine einfache Scriptsprache. Liege ich soweit richtig? Was gibt es
darüber hinaus noch zu wissen?

thx
JarJar

Autor: Μαtthias W. (matthias) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

make ist "mehr" als eine Scriptsprache. Im Prinzip definierst du
Regeln zum Erstellen von einzelnen Dateien. Eine solche Regel enthält
dann Abhängigkeiten von anderen Dateien. Es gibt also z.B. eine Regel:

Regel erzeuge_elf:
"Erstelle Datei anwendung.elf aus den Dateien main.o, rs232.o und
lcd.o mit dem Befehl 'gcc main.o rs232.o lcd.o'"

Wird jetzt make mit "make erzeuge_elf" aufgerufen wird diese Regel
abgearbeitet. Es wird also geschaut ob die Datei anwendung.elf schon
existiert und diese auch neuer ist als die drei "Elterndateien".
Trifft diese Bedingung nicht zu (ist also eine der Elterndateien neuer
als die Zieldatei) wird der genannte Befehl ausgeführt.

Mit mehreren Regeln und diversen Abhängigkeiten ergibt sich dann eine
Art Erstellungsbaum, von dem nur die nötigen Zweige abgearbeitet
werden. Das Ganze ist vor allem in großen Projekten nützlich da so
nicht bei jedem Buildvorgang alle Schritte durchgeführt werden müssen.

Für dich reicht es aber wahrscheinlich wenn du in mfile deine
gewünschten Einstellungen vornimmst und dann das entstandene makefile
einfach benutzt.

Neben (GNU)make gibt es noch ein paar Alternativen die aber im
Unix-Umfeld und im Zusammenspiel weniger genutzt werden obwohl deren
Benutzung IMHO etwas intuitiver ist wie etwa ANT oder JAM.

Matthias

Autor: JarJar (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Matthias,
danke für die Erläuterung. Das bringt gleich wieder etwas mehr Licht
in's Dunkel. Ich finde es blöd das in den meißten Büchern Header- und
Makefiles immer ziemlich kurz kommen oder gar nicht besprochen werden.
Bei Makefiles kann es daran liegen das IDE's meist ohne auskommen,
aber Headerfiles braucht jeder C-Compiler früher oder später.
Naja, eines Tages hab ich vielleicht mal alles kapiert

Autor: Rolf Magnu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Naja, Scriptsprache trifft es nicht so ganz.
In einem Makefile werden Regeln definiert, in denen angegeben ist, von
welchen Eingangsdateien eine Zieldatei ahbängt und wie sie aus diesen
erzeugt werden kann. Make vergleicht beim Aufruf das Alter der
Eingangsdateien mit dem der Zieldatei, und wenn eine der
Eingangsdateien neuer ist, wird das Ziel neu erstellt. Diese Regeln
können dann beliebig tief verschachtelt werden, indem in einer Regel
als Eingangsdatei die Zieldatei einer anderen Regel angegeben ist.
Die Variablen dienen primär der Übersichtlichkeit und Anpassbarkeit.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.