Wozu make?

make ist ein kleines nützliches Programm, mit dem man Skripte basierend auf Abhängigkeiten automatisieren kann.

Ein Skript ist normalerweise ein oder mehrere Kommandos, die man in eine Batch-Datei schreibt.

Ein für Programmierer üblicher Vorgang ist, den Aufruf für den Compiler in ein Skript zu fassen. Ein einzelnes Batch-Skript ist allerdings sehr aufwendig, wenn es Abhängigkeiten prüfen soll. make ist eine Vereinfachung, so dass Programmierer ihre Skripte mit weniger Aufwand formulieren kann.

Make erlaubt solche Skripte in Abhängigkeiten zu setzen. Ein Skript für make erlaubt es die Skripte und ihre Abhängigkeiten in einer Datei, ein sogenanntes „Makefile“, zusammenzufassen.

Wie funktioniert make?

Eine Batch-Datei wird mit einem Ziel geschrieben und das wird durch die Ausführung des Skripts (hoffentlich) erreicht.

make formuliert mehrere Ziele und erlaubt ein Ziel in Abhängigkeit von anderen Zielen zu setzen.

Ein Beispiel für ein Ziel wäre „Spaghetti essen“. „Spaghetti essen“ ist aber abhängig von „Spaghetti im Teller haben“. Bevor man „Spaghetti essen“ kann, muss also man zuerst das Ziel „Spaghetti im Teller haben“. Das Ziel „Spaghetti im Teller haben“ ist wiederum abhängig von „Teller aus dem Schrank nehmen“ und „Spaghetti kochen“ und so geht es weiter, bis man bei „Spaghetti herstellen“ und „Keramik für Teller herstellen“ angekommen ist.

In einem Makefile lässt sich beschreiben, wie die Ziele voneinander abhängig sind und was zu tun ist, um ein Ziel zu erreichen. Die als Vorbedingung erforderlichen Ziele, müssen zuvor erfolgreich erreicht werden, bevor das abhängige Ziel umgesetzt wird.

So lässt sich für Programmierer beschreiben, dass man für das Ziel „ausführbares Programm“ beschreiben, dass sein Quelltext übersetzt wird.

Je größer ein Projekt wird, desto mehr muss jedoch erzeugt werden, zum Beispiel Bibliotheken. Um ein Produkt zu erzeugen, müssen die Bibliotheken erzeugt werden, die ausführbare Datei, vielleicht einige Zusatzprogramme, ggfs. muss Dokumentation erzeugt werden und nachdem die Dateien erfolgreich erzeugt wurden, muss ein Installer aufgerufen werden, der ein Installationsprogramm erzeugt, das das Produkt installieren kann. All diese Abhängigkeiten kann make automatisieren.

Das Interessante hierbei ist nun, dass make nur Ziele konstruiert, die fehlen oder veraltet sind. Bereits existierende Ziele, die auch aktuell sind, werden von make nicht erneut erzeugt. Das beschleunigt das Kompilieren bei großen Projekten deutlich.