Abstract: Wie übersetzt man die schnellste Grafikkarte der Welt? Mit makepp,
genau wie ein C++- oder sonstiges Software-Projekt -- wenn man keine
Phantomfehler suchen will, die erst nach »make clean« verschwinden.
Nicht nur werden Makefiles kleiner und flexibler für Umorganisationen,
mit Graphen behält man den Überblick. Anders als klassische makes,
aber doch kompatibel zu Gnu make, analysiert makepp selber
verzeichnisübergreifend alle Abhängigkeiten und merkt sie sich auch
für die Zukunft, um immer zuverlässig alles Nötige neu aufzubauen.
Dank dieses tiefen Wissens bietet es einen Build Cache, um, auch z.B.
projektweit, Neuübersetzungen des Selben zu vermeiden. Mit dem
Repository-Mechanismus kann man erzeugte Dateien ohne spezielle
Vorkehrungen von Quellen trennen, oder einen kompletten Build als
Vorlage bereitstellen, wo dann individuelle Entwickler nur noch ihre
geänderten Dateien brauchen.
Dieses umfangreiche Werkzeug ist nicht nur in Perl geschrieben, sondern
erlaubt auch den Perleinsatz auf allen Ebenen. Man kann Perl-Kode
direkt in die Makefile oder als auszuführenden Befehl einer Regel oder
als Funktionsausdruck schreiben. Wer das lieber trennt, definiert
stattdessen in einer Makefile oder besser in einer Perlbibliothek
eigene Direktiven, Befehle oder Funktionen. Für letztere besteht
Zugriff auf das Rahmengerüst, welches auch die zahlreichen eingebauten
Befehle nutzen. Wo Unix-Klassiker wie cut, expr, grep, sed oder sort
daran kranken, daß jeder eine eigene Spezifikationssprache mitbringt,
haben ihre in makepp eingebauten Pendants einfach Perl parat.
Wem das nicht weit genug geht, kann makepp auch noch mit Klassen
erweitern, die entscheiden, wann eine Datei als geändert gilt (bei
C-artigen Sprachen werden z.B. Leerzeichen- oder Kommentaränderungen
ignoriert). Andere Klassen analysieren Befehle, um z.B.
Includeverzeichnisse oder Bibliotheken zu erkennen. Darauf aufsetzend,
parsen weitere Klassen die Eingabedateien, um z.B. nötige Includes zu
identifizieren und nötigenfalls im Vorbeigehen aufzubauen. Gerne
nehmen wir Eure Klassen für weitere Sprachen oder Werkzeuge mit auf!