Forum: Compiler & IDEs Makefile, MFile & co


von JarJar (Gast)


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

von Μαtthias W. (matthias) Benutzerseite


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

von JarJar (Gast)


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

von Rolf Magnu (Gast)


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.

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.