Als nächstes wollen wir euch zeigen, wie ihr eure Programme kompilieren könnt, ohne
dass ihr andauernd diesen langen Aufruf an gcc eintippen müsst.
Das wollen wir erstmal an einem kleinen Beispiel motivieren, warum das vielleicht sinnvoll
ist.
Wenn wir uns zurück an die erste Aufgabe erinnern, dann hatten wir da die Lilo, die
aus genau einer Datei bestand.
Da war es noch recht handhabbar, tatsächlich jedes Mal den gcc in der Kommandozeile aufzurufen,
wenn die Datei übersetzt werden sollte.
Bei größeren Softwareprojekten stößt man da jedoch schnell an seine Grenzen.
Zum Beispiel besteht ein einfacher Texteditor, wie zum Beispiel Wim in der Version 8.1, bereits
aus 136 C-Dateien.
Wenn man nun diesen Editor übersetzen möchte, müsste man für jede dieser 136 Dateien den
gcc aufrufen.
Ähnlich sieht es bei noch größeren Projekten wie zum Beispiel OpenSSH mit 269 Dateien oder
dem Linux-Kernel mit weit über 26.000 Dateien aus.
Spätestens da ist es nicht mehr möglich, das Softwareprojekt von Hand zu übersetzen.
Insbesondere gibt es auch einen erheblichen Zeitaufwand, wenn man versucht eine Datei zu
kompilieren, an der sich gar nichts geändert hat.
Dies ist verschwendete Zeit.
Was man also möchte, ist ein automatisches System, das erkennt, welche Dateien modifiziert
wurden und das diese entsprechend übersetzt.
Und an dieser Stelle kommt Make ins Spiel.
Mit Make ist es möglich, verschiedene Dateien aus jeweils anderen zu erzeugen, und zwar
auf Basis von der Regel, die man als Programmierer selbst bestimmen kann.
In diesem Beispiel haben wir zwei Dateien, einmal Test.c und Test.h.
Aus diesen beiden Dateien abgeleitet, gibt es noch zusätzlich die Datei Test.o, die
gebaut wird, indem man GCC aufruft, wenn die beiden erstgenannten Dateien als Argument
übergibt.
Make leistet nun, dass genau diese Übersetzung stattfindet, und zwar immer dann, wenn sich
etwas an dieser beiden Quelldateien Test.c oder Test.h geändert hat.
Die Entscheidung, ob sich etwas geändert hat, basiert dabei auf dem Modifikationszeitpunkt
der Dateien.
Das bedeutet, solange wie Test.o neuer ist als Test.c oder Test.h, muss nichts gemacht
werden.
Wenn jedoch eine der beiden Quelldateien Test.c oder Test.h einen Modifikationszeitpunkt
haben, der junger ist als der von Test.o, dann wird Make Test.o erneut bauen.
Diese angesprochenen Regeln, mit denen die Abhängigkeit zu Quelldateien modelliert werden
kann, werden in der Datei namens Make-File definiert.
Das Make-File besteht dabei aus Regeln, die aussehen wie folgt.
Wir haben auf der einen Seite ein Target, das ist der Name der Datei, die erstellt werden
soll.
Davon abgetrennt durch Doppelpunkte sind die Abhängigkeiten, das sind die Dateien, woraus
das Target gebaut werden soll.
In der Zeile darunter befindet sich die Befehlszeile.
Hier wird beschrieben, mit welchem Befehl das Target erstellt werden kann.
Hier ist zu beachten, dass die Befehlszeile durch einen Tabulator eingerückt ist.
Dieser ist wichtig, weil Make sonst nicht erkennt, dass es sich hierbei um eine Befehlszeile
handelt.
Die bereits angesprochenen Abhängigkeiten können entweder selbst Dateien sein, zum
Beispiel C-Dateien, die ihr schreibt, oder wiederum eigene Targets, die durch eine andere
Zugänglich über
Offener Zugang
Dauer
00:07:32 Min
Aufnahmedatum
2020-05-24
Hochgeladen am
2020-05-25 00:06:26
Sprache
de-DE