Das Problem

Schon früh nach der Einführung von Compilern und mit dem Aufkommen der ersten, großen Softwareprojekte wurde klar, dass ein System benötigt wurde, welches den komplizierten und fehlerträchtigen Prozess der Umwandlung von Quellcode zu lauffähiger Software koordiniert. Natürlich lässt sich bis zum heutigen Tag jeder Compiler manuell ohne eine solche Automatisierung aufrufen und für Mini-Projekte mag dies auch ausreichend sein, dennoch kommt man heutzutage nicht um ein ausgefeiltes Build System herum, welches diese Aufgabe erledigt. Das Problem dabei ist nur, dass es eine unermessliche Anzahl solcher Systeme gibt, sowohl im Bereich der freien als auch der proprietären Software. Hinzu kommen moderne IDEs, welche ebenfalls derartige Features integrieren.

Gerade bei quelloffener Software können die GNU Autotools als Platzhirsch bezeichnet werden. Aufgrund ihre langen Verfügbarkeit und der langjährigen Unix-Erfahrung der GNU-Entwickler bieten diese einen großen Funktionsumfang, gelten allgemein jedoch als komplex und schwer verständlich. Aus diesem Grund sind mit QMake, CMake, Scons, Waf und vielen weiteren nennenswerte Alternativen entstanden, die an dieser Stelle ebenfalls untersucht werden sollen. Als Testsystem dient Ubuntu Linux. Es sollen nur quelloffene Lösungen untersucht werden und auch die Build Systeme moderner IDEs (auch quelloffener) werden ausgeklammert. Zum Aufruf der Tools genügt also eine einfache aber effektive Kommandozeile.

Alle erstellten Dateien können in meinem öffentlichen Home-Verzeichnis heruntergeladen werden.

Das Testprogramm

Das Testprogramm, das für die nachfolgenden Beschreibungen der Build Systeme verwendet wird, wird auf dieser Seite näher Beschrieben. Im Wesentlichen handelt es sich dabei um ein kleines C-Programm, das eine externe Abhängigkeit (libcaca0) besitzt. Zwei Versionen des Programms liegen vor: Das gesamte Programm in einer Quelldatei und das selbe Programm aufgeteilt in mehrere Quelldateien mit Headern.

Die Lösungsansätze

Über die Jahre sind viele Systeme zum Softwarebau entstanden, welche den manuellen Aufruf der beteiligten Werkzeuge (Compiler, Linker, ...) geradezu obsolet machen. Dessen ungeachtet gehört das Verständnis der beteiligten Programme zum Basiswissen, um Build Systeme erfolgreich einsetzen zu können. Eine kurze Beschreibung der Entwicklungsprogramme ist also unerlässlich. Die darauf aufbauenden Automatisierungssystem lassen sich dann ungefähr wie folgt kategorisieren: Makefiles und Programme zur Erzeugung derer, make-Alternativen, im Sourcetree eines Programmes lebende Build Systeme.

Jedes der foglenden Systeme wird auf einer eigenen Seite näher beschrieben:

  • Grundlegendes
  • Systeme zur Generierung von Makefiles
    • Unix eben: mkmf (make makefile)?
    • Die Macht der Makros: GNU Autotools?
    • Trolltechs QMake?
    • Premake?
  • Alternative Lösungsansätze außerhalb des Source Trees
    • A-A-P?
    • cmake?
    • dmake?
    • omake?
    • pmake?
    • rmake (Ruby Make)?
    • Scons?
  • Im Source Tree ausgelieferte Build Systeme
    • BSDBuild aus libagar?
    • Waf?

Schlussfolgerung

<<<ERST NACH FERTIGSTELLUNG DER OBEREN ARTIKEL MÖGLICH>>>


attachments

imageappend Append an Image
>