Open Source im professionellen Einsatz
Linux-Magazin 01/2011
© Sebastian Duda, 123RF.com

© Sebastian Duda, 123RF.com

Software automatisch erstellen

Baumeister

Beim Erstellen von Software unterstützen Buildtools und Buildsysteme die Entwickler und ihre Teams. In einem Überblick zeigt dieser Artikel den Klassiker Make und seine Alternativen bis zu Maven und den Buildservices. Dazu gibt's Empfehlungen für den Einsatz in verschiedenen Szenarien.

744

Auch in Zeiten automatischer Codegeneratoren bleiben die großen Bauherren moderner Software immer noch menschlich. Ihre Werkzeuge sind Editoren, Compiler, Debugger und Sourcecode-Verwaltungssysteme (siehe den entsprechenden Artikel in diesem Schwerpunkt).

Zusammen ergeben diese Programme den Arbeitsbereich im Umfeld der Software-Entwicklungstools und bilden zusammen das jeweilige Buildsystem für die Software. Eine genauere Abgrenzung und Begriffsdefinition gestaltet sich dabei eher schwierig. Auch die Wikipedia leitet automatisch vom Begriff Buildsystem zum Artikel über Erstellungsprozesse weiter, beschränkt sich dort aber auf die Beschreibung von Kompilation und Linken mit Bibliotheken.

Ohne eine detailliertere Definition und Abgrenzung zu versuchen, versteht dieser Artikel im Folgenden unter Buildtools die eigentlichen Werkzeuge für die automatisierte Software-Erstellung. Buildsysteme bauen darauf auf, sie nutzen Buildtools zusammen mit anderen Komponenten. Das gibt es in den unterschiedlichsten Ausprägungen, vom persönlichen Projekt bis hin zu Software, die möglichst fehlerfrei auf Millionen von Geräten installiert sein soll. Dementsprechend sind auch die Anforderungen der Entwickler an die Tool-Landschaft höchst unterschiedlich, sie reichen vom einfachen Werkzeug bis zu komplexen Szenarien.

Das einfachste Buildsystem ist die Entwicklungsumgebung, mit der der Entwickler Tag für Tag kodiert, kompiliert und Fehler sucht. Bei modernen Umgebungen wie zum Beispiel Eclipse konzentriert er sich da ganz auf den Code. Außer der Definition von externen Abhängigkeiten (zum Beispiel Bibliotheken) ist wenig Input notwendig. Der Build erfolgt automatisch und per Knopfdruck (siehe Abbildung 1).

Abbildung 1: Der automatische Build hört bei Eclipse auf ein Mausklick-Kommando.

Das funktioniert im Allgemeinen sehr gut und deckt die Bedürfnisse von vielen kleinen Ein-Personen-Projekten ab. Schwierig wird das Ganze erst dann, wenn das Programm zum Beispiel besondere Compilerflags für Optimierungen benötigt. Diese selten genutzten Optionen sind dann oft in den "dunklen Ecken" der Entwicklungsumgebung versteckt – selten genutzte Eingabedialoge, die man erst finden muss.

Arbeiten mehrere Entwickler zusammen, gibt es weitere Probleme. Der Code-Austausch funktioniert zwar sehr gut über per Plugin angeschlossene Sourcecode-Verwaltungssysteme wie CVS oder Subversion. Aber identische Projekteinstellungen lassen sich damit nicht so einfach garantieren.

Wichtiger ist jedoch ein Problem, das sich bei der Veröffentlichung des Programms stellt. Die Veröffentlichung der Quellen reicht nämlich selten. Benutzer wollen auch wissen, wie sie aus den Quellen das Programm bauen. Wer den Code aktiv weiterentwickeln will, schätzt die Anwesenheit aller Projektdateien. Anwender dagegen sind meist nur am Ergebnis interessiert, haben keine Programmierambitionen und möchten keine komplette Entwicklungsumgebung installieren, nur um die Software zu erstellen.

Formalisierte Build-Beschreibungen

Hier kommen die Buildtools ins Spiel. Zusätzlich zu den eigentlichen Programmquellen verfasst der Entwickler eine formalisierte Beschreibung des Build (das »Makefile« ). Diese Datei definiert die Schritte (Kompilation, Linken) zusammen mit den notwendigen Optionen für alle beteiligten Programme (Compiler, Linker). Der Anwender benötigt nur noch diese Programme sowie das Buildtool. Mit einem einfachen Aufruf erzeugt er damit die Software aus den Quellen, ohne sich um die Details zu kümmern.

Theoretisch würde auch ein Shellskript als Makefile genügen, insbesondere für den Endanwender. Doch manche Anforderungen kann es nicht erfüllen. Der Entwickler startet beispielsweise unzählige Edit-Compile-Link-Testzyklen, bis das Programm fertig ist. Da das Kompilieren und das Linken zeitaufwändig sind, übersetzen Buildtools über definierte Abhängigkeiten nur die seit dem letzten Lauf geänderten Dateien neu.

Diese Abhängigkeiten muss der Entwickler manuell definieren oder er greift vielleicht auf die Fähigkeiten des Compilers zurück. In aller Regel haben Buildtools auch eingebaute Regelsätze: So kompiliert GNU-Make C-Quellen bereits mit

$(CC) -c $(CPPFLAGS) $(CFLAGS) Quelle.c -o  Quelle.o

solange der Anwender keine zusätzlichen Anweisungen gibt.

GNU-Make – der Klassiker

Make, insbesondere wegen seiner aktiven Weiterentwicklung und seines großen Funktionsumfangs, ist das omnipräsente, aber nicht unumstrittene Buildtool schlechthin. Wie beschrieben kodieren Entwickler ihre Regelsätze im Makefile so, dass Make ihr Projekt möglichst effizient baut. Beliebte Tricks dabei sind Rekursionen (Make ruft sich selbst auf), hierarchische Verzeichnisbäume mit Sub-Makes oder selbstmodifizierende Makefiles. Um komplexe Projekte im Griff zu behalten, muss der Entwickler auch ein Experte für Make sein.

Ein zentraler Kritikpunkt an Make ist seine obskure Syntax. Kommandos müssen zum Beispiel per Tabulator eingerückt sein, sonst gibt es Probleme. Da viele Editoren Tabs automatisch in Leerzeichen umwandeln, sind triviale Fehler programmiert. Aber auch Zeilen wie

ifneq (,$(findstring $(TYPE),$(CD_TYPES)))
TARGET := iso
else
TARGET := img
endif

muten sehr altertümlich an. Dabei sind Bedingungen und Funktionen erst nach und nach Teil von Make geworden, vorher ging vieles nicht oder nur über aufgerufene Shellkommandos.

Diesen Artikel als PDF kaufen

Express-Kauf als PDF

Umfang: 7 Heftseiten

Preis € 0,99
(inkl. 19% MwSt.)

Linux-Magazin kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

comments powered by Disqus

Ausgabe 10/2017

Digitale Ausgabe: Preis € 6,40
(inkl. 19% MwSt.)

Artikelserien und interessante Workshops aus dem Magazin können Sie hier als Bundle erwerben.