3 - make [ID:16447]
50 von 96 angezeigt

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

Teil einer Videoserie :
Teil eines Kapitels:
Freispeicherverwaltung

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

Einbetten
Wordpress FAU Plugin
iFrame
Teilen