# 3.3. Configure

Der Titel dieses Abschnitts- Configure, bedeutend soviel wie Konfiguriere - läßt Sie wahrscheinlich fragen: Konfiguriere ? Was muß konfiguriert werden ? Oder wer ?

Nun, gehen wir davon aus, daß Sie ein Programm geschrieben haben inklusive einem Makefile. Dann wollen Sie es verbreiten, aber die compilierte Binärdatei läuft nur auf Ihrem System und auf solchen, die mit Ihrem kompatibel sind. Um andere Plattformen zu unterstützen wie die verschiedenen Unix-Systeme oder Maschinen wie Alpha's oder RISC's müssen Sie ihr Programm neu übersetzen. Der einfachste Weg wäre, das Quellpaket auf die Zielmaschine zu kopieren und `make` nochmals laufen zu lassen. Aber was wäre, wenn die Zielmaschine einen anderen Compiler benutzt oder in anderer Weise ein Problem erzeugt, die ein Erstellen des Programms verhindert ? Nicht zu erwähnen die schwierigeren Dinge wie der Installationspfad für Ihr Programm und Dokumentation- z.B. kann KDE auf einer Maschine unter ``opt/kde/ installiert sein, auf einer anderen aber unter `usr`local/kde/. In diesem Fall müßten Sie das Makefile immer bearbeiten, um eine korrekte Übersetzung und Installation Ihres Produkts sicherzustellen.

Glücklicherweise haben die GNU-Werkzeuge noch mehr zu bieten als das mächtige `make`- die allgemein genutzten Pakete automake und autoconf. Es klingt gut, etwas mit "auto"- es scheint als ob etwas beim Applikations-Design einfach und schnell gemacht werden kann, was auch genau den Punkt trifft.

Der Zweck von `automake` ist generell, die sogenannten `Makefile.in`'s aus der Datei `Makefile.am` zu erstellen, die Sie für Ihr Projekt anstatt einer "richtigen" Makefile schreiben müssen. Diese Makefile.am besteht aus Makros, die leicht zu verstehen ist Komplexität reduziert, die make anbietet, so daß eine Makefile.am fehlerloser und schneller geschrieben werden kann als das letztliche Makefile.

Aber wer erzeugt mir dann letztlich mein Makefile ? Nun, hier kommt autoconf. Autoconf benötigt verschiedene Makrodateien für das Projekt. Diese sind die Makefile.in's, die automake erzeugt hat und eine Datei namesn `configure.in`, die auch aus Makros besteht. Hierbei beinhalten die Makefile.am und .in's die Makros die dafür verantwortlich sind, wie das Ziel erstellt wird in Bezug auf die Quellen, die übersetzt werden müssen, welche Dateien zum Paket gehören und welchen Namen die letzliche Binärdatei oder Bibliothek nach einem Erstellungsvorgang hat. `configure.in` andererseits beinhaltet die Makros, nach denen das letztliche configure-Skript das System prüft, auf denen configure ausgeführt wird. Dies können z.B. das Compiler-Kommando, benötigte Bibliotheken zu denen die letzliche Binärdatei gelinkt wird und include-Dateien, die das Projekt benötigt, sein.

Wenn Sie z.B. eine KDE Applikation schreiben und nach der Fertigstellung Ihr Programm Benutzern zur Verfügung stellen möchten, muß jeder Benutzer die Binärdatei selbst compilieren. Dann würden Sie eine `configure.in` Datei, die die Makros für eine KDE-kompatible Applikation enthält. Diese Makros werden dann expandiert zu einer Systemprüfung, ob die Qt-Bibliothek installiert ist, dem Pfad der Qt-Headerdateien, den KDE Bibliotheken und Headern etc.

Zusammenfassung: Um eine GNU-gemäße Applikation zu erstellen, die auf verschiedene Unix-Betriebssysteme und andere Maschinen als Ihre eigene portabel sein soll, müssen Sie folgendes ausführen:

1. die Quellen Ihres Projekts schreiben

2. eine Makefile.am für jedes Unterverzeichnis erstellen, inklusive dem Hauptverzeichnis Ihres Projekts

3. eine configure.in Datei im Hauptverzeichnis erstellen, das die Makros für die Systemanforderungen enthält

4. automake aufrufen

5. autoconf aufrufen

Dann ist die Hauptarbeit getan. Automake erzeugt die Makefile.in's, autoconf läuft über die `configure.in` und erzeugt das ausführbare Shellscript `configure`. Alles, was Sie dann zu tun haben, ist die Ausführung mit `./configure`, und das Skript wird die Prüfungen durchführen. Schließlich werden die Makefiles erzeugt, die die Ausführung von make (oder gmake) erlauben, um das Projekt zu erstellen.

Dies alles scheint ein bißchen viel zu sein, nur um eine kleine Applikation zu schreiben und auch viel zu lernen, speziell die korrekten Makros. Aber allein der Umstand, daß Sie damit einen Kompiliervorgang auf fast allen Unix-Systemen erreichen, macht die Arbeit früher oder später wett. Schließlich müssen Sie diese Arbeit auch nur einmal für das Projekt machen und im Fall, daß Ihre Projektdateien anwachsen, brauchen Sie ja nur die Dateinamen den Makros hinzufügen.

Nun, inwiefern unterstützt KDevelop diese Art der Applikationserstellung und wie kompliziert wird es für den Programmierer? Die gute Nachricht für Sie ist: Sie brauchen noch nicht eimal etwas über Makros und Skripte zu wissen. Alle Details sind hinter einer einfach zu bedienenden graphischen Benutzeroberfläche versteckt, die die Arbeit für Sie übernimmt. Eine Applikation wird mit den GNU-Tools deshalb auf sehr benutzerfreundliche Art erstellt:

Erzeugen Sie Ihre Applikation einfach mit dem KAppWizard nach Wahl der Bedürfnisse Ihrer Applikation- es mag ein reines C++ Terminalprogramm sein oder eine Art GUI Programm, das die Qt oder die Qt/KDE Bibliothek benutzt. Die ganze Arbeit wird für Sie erledigt und Ihr Projekt enthält schon die Makefiles, die durch eine automatische Ausführung der GNU-Tools und des configure-Skripts erstellt wurden.

Das wäre es schon- Sie brauchen nur die Quellen Ihres Projekts zu erweitern, sei es durch Hinzufügen von Klassen, Dialogen, Übersetzungen oder Dokumentation, was auch vollständig automatisiert abläuft. Konzentrieren Sie sich einfach auf die wirkliche Arbeit eines Entwicklers, nämlich Ihrer Applikation Funktionalität zu verleihen. In den meisten Fällen werden Sie wahrscheinlich nie mit Makefiles in Berührung kommen, wenn Sie KDevelop benutzen.