weiter Hauptseite   Inhalt

Abläufe automatisieren mit make - ein Tutorial

-----

Quelle: Dieses Make-Tutorial ist den Kapiteln 17 und 23 des Buchs Der C++-Programmierer entnommen und unterliegt daher dem Copyright. Die ersten vier Abschnitte (siehe Link Inhalt oben rechts) führen in das Thema ein. Die daran anschließenden Abschnitte sind für Fortgeschrittene gedacht, die es noch genauer wissen wollen. Hilfreich für das Verständnis ist das Nachvollziehen der Beispiele (Download).

Bei der Programmentwicklung gibt es immer wiederkehrende Aufgaben. Darunter sind die Compilation und das Testen eines Programms besonders häufig. Andere häufige Aufgaben sind das Herstellen einer aktuellen Dokumentation, das Sichern von Dateien, Bauen einer Zusammenstellung (Distribution genannt) von Programm und Dokumentation zur Verteilung oder das Laden von Programmen auf einen Web-Server. Auch das Löschen nicht mehr benötigter Dateien gehört dazu.

Diese Aufgaben in Einzelschritten per Hand durchzuführen, ist mühsam und fehleranfällig, weswegen schon früh dafür Werkzeuge ersonnen wurden. Der eigentliche Ablauf der Übersetzung und Erzeugung des lauffähigen Programms, Build-Prozess genannt, findet bei einer Entwicklungsumgebung (IDE) im Hintergrund statt. Programme wie make, die über die Kommandozeile aufgerufen werden können, erlauben das Bauen (engl. build) eines Programms auch ohne IDE.

make wird mit Regeln gesteuert, die sich in einer Textdatei, allgemein Makefile genannt, befinden. Im C/C++-Bereich gab und gibt es das Programm make, das auch für Windows und Mac OS erhältlich ist. In der Java-Programmierung setzte sich das ebenso mächtige Tool ant durch, das von einer XML-Datei gesteuert wird wie auch MSBuild von Microsoft. Ein Makefile hat einen speziellen syntaktischen Aufbau. Es gibt mehrere "Dialekte" , die sich allerdings ähneln. Von den vielen make-Programmen ist GNU-make das Bekannteste, siehe make. Es bietet nicht nur einen großen Funktionsumfang, sondern ist im Gegensatz zu manch anderen Programmen auch noch portabel. Aus diesem Grund beschränke ich mich im Folgenden auf GNU-make, dessen Grundlagen und sinnvoller Einsatz kurz beschrieben werden. Aus Platzgründen werden nur die Funktionsweise, die wichtigsten Eigenschaften und konkrete Beispiele für den täglichen Gebrauch beleuchtet. Wer mehr wissen möchte, sei auf die angegebene Quelle make verwiesen und auf Abschnitt 23.1 und folgende, die fortgeschrittene Techniken auf der Basis von make zum Inhalt haben. Unter Linux gibt es eine kurze Hilfe mit den Befehlen man make oder info make.

Makefiles sind Dateien, die Abläufe von Dienstprogrammen des Betriebssystems steuern. Dabei wird auf Datum und Uhrzeit der beteiligten Dateien geachtet, sodass überflüssige Operationen vermieden werden, zum Beispiel die Compilation einer längst übersetzten Datei, die nicht geändert wurde. Bei Änderungen werden also nur die davon betroffenen Dateien neu übersetzt - ein großer Vorteil! Dieser Mechanismus wird auch von Entwicklungsumgebungen genutzt, von denen manche direkt make benutzen und auch ein Makefile erzeugen, das man sich ansehen kann.


weiter    Inhalt    Quelle: Ulrich Breymann: Der C++ Programmierer, (C) Hanser Verlag 2009