<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=GNU_Build_System</id>
	<title>GNU Build System - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=GNU_Build_System"/>
	<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=GNU_Build_System&amp;action=history"/>
	<updated>2026-05-23T04:17:01Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Wikipedia (Deutsch) – Lokale Kopie</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://wiki-de.moshellshocker.dns64.de/index.php?title=GNU_Build_System&amp;diff=1060532&amp;oldid=prev</id>
		<title>2001:9E8:6C63:2E01:3D9A:AD77:A542:EF8B: /* Diskussion von Nachteilen und Kritik */ Zeichensetzung und so</title>
		<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=GNU_Build_System&amp;diff=1060532&amp;oldid=prev"/>
		<updated>2025-04-17T12:57:16Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Diskussion von Nachteilen und Kritik: &lt;/span&gt; Zeichensetzung und so&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;[[Datei:Autoconf-automake-process.svg|mini|400px|Programmablaufplan von [[autoconf]] und [[automake]], zwei Tools im &amp;#039;&amp;#039;GNU Build System&amp;#039;&amp;#039;]]&lt;br /&gt;
&lt;br /&gt;
Das &amp;#039;&amp;#039;&amp;#039;GNU Build System&amp;#039;&amp;#039;&amp;#039; ist eine Sammlung von Tools für die [[Programmierung]], die vom [[GNU-Projekt]] entwickelt wurden. Diese Tools sind für das [[Plattformunabhängigkeit|Portieren]] von [[Quellcode]]-[[Programmpaket|Paketen]] auf [[Unix]]-Systemen gedacht. Das &amp;#039;&amp;#039;GNU Build System&amp;#039;&amp;#039; ist Teil der [[GNU Toolchain]]s und ist in [[Freie Software|freien]] Software-Projekten weit verbreitet. Während die Werkzeuge selbst [[freie Software]] sind und unter der [[GNU General Public License|GPL]] stehen, können auch [[Proprietäre Software|proprietäre Projekte]] damit entwickelt werden.&lt;br /&gt;
&lt;br /&gt;
== Enthaltene Werkzeuge ==&lt;br /&gt;
Das &amp;#039;&amp;#039;GNU Build System&amp;#039;&amp;#039; wird durch die sogenannten &amp;#039;&amp;#039;&amp;#039;Autotools&amp;#039;&amp;#039;&amp;#039; erstellt&amp;lt;ref&amp;gt;{{Internetquelle |url=https://www.gnu.org/software/automake/manual/html_node/GNU-Build-System.html#GNU-Build-System |titel=GNU Build System (automake) |zugriff=2018-03-22}}&amp;lt;/ref&amp;gt;. Autotools enthält die [[GNU]]-Werkzeuge &amp;#039;&amp;#039;Autoconf&amp;#039;&amp;#039;, &amp;#039;&amp;#039;Autoheader&amp;#039;&amp;#039;, &amp;#039;&amp;#039;Automake&amp;#039;&amp;#039; und &amp;#039;&amp;#039;Libtool&amp;#039;&amp;#039;. Weitere ähnliche Programme, die oftmals zusammen mit dem &amp;#039;&amp;#039;GNU Build System&amp;#039;&amp;#039; genutzt werden, sind [[GNU Make]], [[GNU gettext]], [[pkg-config]] und die [[GNU Compiler Collection]], auch unter der Bezeichnung GCC bekannt.&lt;br /&gt;
&lt;br /&gt;
=== GNU Autoconf ===&lt;br /&gt;
&amp;#039;&amp;#039;Autoconf&amp;#039;&amp;#039; ist eine [[Software]], die automatisch Shell-[[Skriptsprache|Skripte]] generiert, die wiederum [[Makefile]]s für ein Softwarepaket erstellen, um das [[Compiler|Übersetzen]] des [[Quellcode]]s für verschiedene [[Unix]]-Systeme (etwa [[Linux]]) zu ermöglichen. Die von Autoconf erstellten Skripte sind allein lauffähig und benötigen kein Autoconf.&lt;br /&gt;
&lt;br /&gt;
Autoconf verwendet GNU [[M4 (Programmiersprache)|m4]], um aus einer vom Anwender erstellten Konfigurationsdatei &amp;#039;&amp;#039;configure.ac&amp;#039;&amp;#039; ein [[Plattformunabhängigkeit|portierbares]] [[Shellskript]] namens &amp;#039;&amp;#039;configure&amp;#039;&amp;#039; zu erzeugen. Dieses &amp;#039;&amp;#039;configure&amp;#039;&amp;#039;-Skript läuft ohne weitere Eingriffe des Benutzers und generiert an die [[Systemumgebung]] angepasste [[Header]]- und Makefiles aus vorgefertigten Schablonen.&lt;br /&gt;
&lt;br /&gt;
Autoconf wurde 1991 von David MacKenzie entwickelt, um seine Arbeit bei der [[Free Software Foundation]] zu vereinfachen. In den folgenden Jahren wuchs seine Bedeutung und es ist inzwischen das am häufigsten verwendete Konfigurationssystem für portierbare [[Open Source|Open-Source-Software]].&lt;br /&gt;
&lt;br /&gt;
Autoconf verarbeitet Dateien (&amp;lt;code&amp;gt;configure.in&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;configure.ac&amp;lt;/code&amp;gt;, obwohl &amp;lt;code&amp;gt;configure.ac&amp;lt;/code&amp;gt; generell bevorzugt wird&amp;lt;ref name=&amp;quot;GNU Autoconf Manual&amp;quot;&amp;gt;[http://www.gnu.org/software/autoconf/manual/html_node/Writing-Autoconf-Input.html &amp;#039;&amp;#039;Autoconf&amp;#039;&amp;#039;, “Writing configure.ac”]&amp;lt;/ref&amp;gt;), um ein [[Konfiguration (Computer)|Konfigurations]][[Skriptdatei|script]] zu generieren.&lt;br /&gt;
&lt;br /&gt;
Wird das generierte Konfigurationsscript ausgeführt, werden –&amp;amp;nbsp;soweit sie angegeben wurden&amp;amp;nbsp;– aus Vorlagen (die normalerweise die Endung „.in“ (z.&amp;amp;nbsp;B. &amp;lt;code&amp;gt;Makefile.in&amp;lt;/code&amp;gt;) haben), die endgültigen Dateien generiert, in diesem Fall ein &amp;lt;code&amp;gt;Makefile&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Autoconf wird dazu benutzt, kleinere Inkompatibilitäten auszubügeln, die in verschiedenen [[unixoid]]en Betriebssystemen gefunden wurden. Zum Beispiel haben einige unixoide Systeme Hilfsmittel, die als nicht funktionsfähig bekannt sind oder komplett fehlen. Autoconf erzeugt ein [[Shellskript]], welches dies erkennen und umgehen kann. Der Output des Autoconf-Werkzeuges ist das Konfigurationsskript.&lt;br /&gt;
&lt;br /&gt;
Autoconf enthält einige Hilfsprogramme, die entwickelt wurden, um das Erzeugen von configure.ac zu vereinfachen, darunter das Autoheader-Tool, das dazu benutzt wird, [[C (Programmiersprache)|C]]-[[Header-Datei]]en zu handhaben, Autoscan, das eine anfängliche Datei für Autoconf erzeugt und ifnames, welche die C-[[Präprozessor]][[identifier]] enthält, die im Programm benutzt werden.&lt;br /&gt;
&lt;br /&gt;
==== Arbeitsweise ====&lt;br /&gt;
Autoconf arbeitet vergleichbar dem Metakonfigurationspaket von [[Perl (Programmiersprache)|Perl]].&lt;br /&gt;
&lt;br /&gt;
Die Idee hinter autoconf ist die Prüfung auf die Verfügbarkeit von Eigenschaften, nicht von bestimmten Programmversionen.&lt;br /&gt;
So unterstützt zum Beispiel der [[C (Programmiersprache)|C-Compiler]] von [[SunOS]] 4 nicht den ISO-C-Standard.&lt;br /&gt;
Eine reine versionsbasierte Vorgehensweise würde daher keinen ISO-C-Compiler auffinden, obwohl auf diesem System durchaus ein entsprechender Compiler vorhanden sein könnte. Erst der Ansatz, ein Zielsystem auf bestimmte Eigenschaften (Features) zu prüfen, führt hier zum gewünschten Ergebnis.&lt;br /&gt;
&lt;br /&gt;
Üblicherweise wird durch die [[Datei]] configure.ac ein portables Skript namens „configure“ erzeugt. Vor dem Übersetzen des Quellcodes muss dieses Skript ausgeführt werden, um die systemabhängigen Makefiles und Headerdateien zu generieren und die Voraussetzungen an das System zu überprüfen. Wird das „configure“-Skript mit dem „--help“-[[Argument]] ausgeführt, werden die möglichen Optionen angezeigt.&lt;br /&gt;
&lt;br /&gt;
=== GNU Autoheader ===&lt;br /&gt;
GNU Autoheader erzeugt eine Vorlage für eine Konfigurations-Header-Datei aus einer Autoconf-Konfigurationsdatei.&amp;lt;ref&amp;gt;http://www.seul.org/docs/autotut/#autoheader&amp;lt;/ref&amp;gt; Die Verwendung von GNU Autoheader ist optional. GNU Autoconf bzw. Automake ist auch ohne GNU Autoheader verwendbar. Wenn Autoheader nicht verwendet wird, dann müssen die von dem Projekt benötigten Konfigurationsmakros als Parameter bei jedem Compiler-Aufruf übergeben werden. Also können bei Nichtverwendung von autoheader, wenn das Projekt eine große Anzahl von Konfigurationsmakros benötigt, die Bildschirmausgaben von Compiler-Aufrufen unübersichtlich werden.&lt;br /&gt;
&lt;br /&gt;
=== GNU Automake ===&lt;br /&gt;
&amp;#039;&amp;#039;Automake&amp;#039;&amp;#039; hilft bei der Erzeugung von portablen &amp;lt;code&amp;gt;Makefiles&amp;lt;/code&amp;gt;, die der Reihe nach von &amp;lt;span style=&amp;quot;font-family:monospace;&amp;quot;&amp;gt;[[make]]&amp;lt;/span&amp;gt; verarbeitet werden. Es erhält seine Eingaben als &amp;lt;code&amp;gt;Makefile.am&amp;lt;/code&amp;gt; und wandelt es in eine &amp;lt;code&amp;gt;Makefile.in&amp;lt;/code&amp;gt;-Datei um, die vom „configure“-Skript genutzt wird, um das letztendliche &amp;lt;code&amp;gt;Makefile&amp;lt;/code&amp;gt; zu erzeugen.&lt;br /&gt;
&lt;br /&gt;
=== GNU Libtool ===&lt;br /&gt;
&amp;#039;&amp;#039;Libtool&amp;#039;&amp;#039; hilft beim Erstellen von [[Statische Bibliothek|statischen]] und [[Dynamische Bibliothek|dynamischen]] [[Programmbibliothek|Bibliotheken]] bei verschiedenen [[unixoid]]en Betriebssystemen. Libtool macht dies durch Abstrahieren des Erstellungsprozesses der Bibliothek, dabei versteckt es Unterschiede zwischen unterschiedlichen Systemen (beispielsweise von [[GNU]]/[[Linux]]-Systemen und [[Solaris (Betriebssystem)|Solaris]]).&lt;br /&gt;
&lt;br /&gt;
== Vorteile des &amp;#039;&amp;#039;GNU Build System&amp;#039;&amp;#039; ==&lt;br /&gt;
Das GNU Build System stellt einem [[Programmierer]] eine Umgebung bereit, mit der er [[Cross-platform]]-Software programmieren kann (die zumindest auf verschiedenen [[unixoid]]en [[Betriebssystem]]en ausgeführt werden kann). Es vereinfacht außerdem den [[Erstellungsprozess|Buildvorgang]], weil der Nutzer normalerweise nur wenige Kommandos ausführen muss, um das Programm aus dem [[Quellcode]] zu erzeugen und zu installieren.&lt;br /&gt;
&lt;br /&gt;
Die Werkzeuge, die vom &amp;#039;&amp;#039;GNU Build System&amp;#039;&amp;#039; benutzt werden, müssen dabei nur auf dem Computer des Entwicklers vorhanden sein. Die Nutzer selbst benötigen keine installierte Version von Autoconf, Automake oder Libtool, um die Software zu erstellen oder zu installieren, die mit deren Hilfe erzeugt wurde. Dies macht das &amp;#039;&amp;#039;GNU Build System&amp;#039;&amp;#039; &amp;#039;&amp;#039;unabhängig&amp;#039;&amp;#039;, weil es zum Erstellen nur Standardtools benötigt, die auf allen [[unixoid]]en Systemen vorhanden sind. Dies wird durch die Benutzung von [[Unix-Shell|Unix-Shellskripten]] bewerkstelligt, die dabei helfen, das Programm für das Betriebssystem des jeweiligen Nutzers zu konfigurieren.&lt;br /&gt;
&lt;br /&gt;
Die Werkzeuge, die im &amp;#039;&amp;#039;GNU Build System&amp;#039;&amp;#039; genutzt werden, können sowohl einzeln als auch gemeinsam genutzt werden; zum Beispiel kann ein Softwareprojekt Autoconf nutzen, ohne auch Automake zu nutzen. Allerdings können die Komponenten des &amp;#039;&amp;#039;GNU Build System&amp;#039;&amp;#039; auch miteinander interagieren.&lt;br /&gt;
&lt;br /&gt;
* Verwertbare configure-Skripte entstehen auch auf sehr neuen oder vollkommen unbekannten Zielsystemen&lt;br /&gt;
* Durch Parameter kann ein für das Zielsystem bestes Ergebnis (Größe, Geschwindigkeit, Stabilität) erreicht werden&lt;br /&gt;
* Normalerweise werden keine exakten Softwareversionsvorgaben zur Übersetzung der Sourcen vorausgesetzt, sondern nur bestimmte Systemeigenschaften&lt;br /&gt;
&lt;br /&gt;
== Einschränkungen des &amp;#039;&amp;#039;GNU Build System&amp;#039;&amp;#039; ==&lt;br /&gt;
Das &amp;#039;&amp;#039;GNU Build System&amp;#039;&amp;#039; nutzt [[Bourne-Shell|Bourne-kompatible Shellskripte]], um dem Nutzer bei der Konfiguration und dem Buildvorgang zu helfen. Allerdings können einige Betriebssysteme, wie die Produktreihe [[Microsoft Windows|Windows]], Bourne-Shellskripte nicht alleine ausführen. Dies macht das Erstellen von Software beim Windows-Betriebssystem ein bisschen schwieriger als das Erstellen auf [[unixoid]]en, die standardmäßig Unterstützung für Bourne-Shellskripte implementiert haben.&lt;br /&gt;
&lt;br /&gt;
Um Kompatibilität mit Konfigurationsscripts zu implementieren, kann man das [[Cygwin]]-System installieren. Cygwin liefert auch die [[GNU Compiler Collection]], [[GNU Make]] und andere Software, die ein nahezu komplettes unixoides System in Windows erstellt. In zunehmendem Maße wird mit [[MinGW]] dadurch auch Cross-Compiling ermöglicht, um Software für einen Windows-Host von einem GNU/Linux oder anderen unixoiden Buildsystemen zu erstellen.&lt;br /&gt;
&lt;br /&gt;
Projekte, die das &amp;#039;&amp;#039;GNU Build System&amp;#039;&amp;#039; nutzen, können wahlweise ein Konfigurationsscript in ihren [[Software-Configuration-Management]] Systemen (so wie [[Concurrent Versions System|CVS]] oder [[Apache Subversion|Subversion]]) bieten. Wenn ein Projekt, das das &amp;#039;&amp;#039;GNU Build System&amp;#039;&amp;#039; nutzt, kein generiertes &amp;lt;code&amp;gt;./configure&amp;lt;/code&amp;gt;-Skript für alle Nutzer bereitstellt, muss der Nutzer eines generieren. Ein möglicher Weg, dies zu bewerkstelligen, ist es, eine Reihe von Kommandos in einer Shell-Kommandozeile auszuführen:&lt;br /&gt;
&lt;br /&gt;
 $ aclocal&lt;br /&gt;
 $ autoconf&lt;br /&gt;
 $ autoheader&lt;br /&gt;
 $ automake --add-missing&lt;br /&gt;
&lt;br /&gt;
Es werden möglicherweise nicht alle oder mehrere Kommandos benötigt, abhängig davon in welcher Weise das vorhandene Projekt das &amp;#039;&amp;#039;GNU Build System&amp;#039;&amp;#039; nutzt. Darüber hinaus ist es auch üblich, ein Skript zur Verfügung zu stellen, oftmals benannt als &amp;lt;code&amp;gt;autogen.sh&amp;lt;/code&amp;gt;, das alle genannten Pre-Build-Tools ausführt. In einigen Fällen kann man auch&lt;br /&gt;
&lt;br /&gt;
 $ autoreconf --install&lt;br /&gt;
&lt;br /&gt;
benutzen, das automatisch die genannten Kommandos aufruft, falls sie benötigt werden.&lt;br /&gt;
&lt;br /&gt;
== Diskussion von Nachteilen und Kritik ==&lt;br /&gt;
* Selbst wenn autoconf/automake/libtool/m4/…-basierte Build-Systeme die Portabilität erhöhen sollen, so funktioniert diese Vorgehensweise allzu oft nicht wie gewünscht; gerade Nicht-Linux-Builds und Cross-Builds erfordern viel zusätzliche Arbeit und Anpassungen.&lt;br /&gt;
* Für Cross-Builds müssen die Konfigurationsscripte auf dem Zielsystem oder einem Cross-Compilation-fähigen System ausgeführt werden; dies ist oft nicht oder nur sehr umständlich möglich, wenn das Script und die zu seiner Erstellung erforderlichen Dateien nicht mitgeliefert werden und kann einen sehr hohen zusätzlichen Aufwand bedeuten.&lt;br /&gt;
* Anpassungen sind aufgrund der von vielen Entwicklern nicht sicher beherrschten M4-Makro-Sprache und der unübersichtlichen Struktur aufwendig und fehlerträchtig.&lt;br /&gt;
* Libtool-basierte Builds dauern wesentlich länger als einfache Make-Builds für ein bestimmtes System, da libtool per Default alle Libraries mehrfach baut (shared, static, teilweise sogar optimiert und debug-Version schon während des Entwicklungszyklus), sodass Development-Turnaround-Cycles mit den Default-Einstellungen deutlich länger dauern können als bei anderen Systemen. Auch der Overhead der Macro- und Shell-Aufrufe kann auf einigen Nicht-Linux-Systemen signifikant ausfallen.&lt;br /&gt;
* In der Vergangenheit waren verschiedene Versionen von autoconf/automake/libtool/etc. nicht untereinander kompatibel; auf dem Entwicklungssystem mussten deshalb mehrere Versionen installiert und verwaltet werden, oder configure/Makefile-Input-Files erforderten ständige Anpassungen mit neuen Versionen.&lt;br /&gt;
* Das [[KDE]]-Team verzichtet seit KDE4 auf autoconf/automake/libtool/etc. und verwendet an seiner Stelle [[CMake]]. Auch andere Projekte begannen mit der Evaluierung alternativer Buildsysteme. [[Apache Ant|Ant]] und [[Perforce Jam|JAM]] sind weitere Ansätze. [[Integrierte Entwicklungsumgebung]]en (IDE) enthalten oft eigene Buildsysteme, die z.&amp;amp;nbsp;B. von CMake konfiguriert werden können.&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
* [[CMake]]&lt;br /&gt;
* [[SCons]]&lt;br /&gt;
&lt;br /&gt;
== Literatur ==&lt;br /&gt;
* Florian Stöhr: &amp;#039;&amp;#039;Die GNU Autotools : Leitfaden für die Softwaredistribution.&amp;#039;&amp;#039; C&amp;amp;L Computer &amp;amp; Literaturverlag, Böblingen 2007, ISBN 978-3-936546-48-4&lt;br /&gt;
* John Calcote: &amp;#039;&amp;#039;Autotools: A Practitioner&amp;#039;s Guide to GNU Autoconf, Automake, and Libtool.&amp;#039;&amp;#039; 2. Auflage, No Starch Press, Daly City, California 2019, ISBN 978-1-59327-972-1&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* [http://sources.redhat.com/autobook/ &amp;#039;&amp;#039;The Goat Book&amp;#039;&amp;#039;-Homepage (aka the Autobook)]&lt;br /&gt;
* Die [http://www.gnu.org/prep/standards.html GNU Coding Standards] (besonders das Kapitel über &amp;#039;&amp;#039;The Release Process&amp;#039;&amp;#039;).&lt;br /&gt;
* Das [http://www.freedesktop.org/software/pkgconfig/ pkg-config]-Package&lt;br /&gt;
* [http://www.gnu.org/software/automake/ GNU Automake-Homepage]&lt;br /&gt;
* [http://www.gnu.org/software/autoconf/ GNU Autoconf-Homepage]&lt;br /&gt;
* [https://www-user.tu-chemnitz.de/~dker/autotools_tutorial.pdf „Hello World“ Example] (PDF, 124&amp;amp;nbsp;KiB)&lt;br /&gt;
* [http://lwn.net/Articles/188693/ Why the KDE project switched to CMake – and how]&lt;br /&gt;
* [http://freshmeat.net/articles/stop-the-autoconf-insanity-why-we-need-a-new-build-system „Stop the autoconf insanity! Why we need a new build system.“] – kritischer Artikel über autoconf auf freshmeat.net&lt;br /&gt;
&lt;br /&gt;
== Einzelnachweise ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{SORTIERUNG:Gnu build system}}&lt;br /&gt;
[[Kategorie:Softwaretechnik]]&lt;br /&gt;
[[Kategorie:Freies Programmierwerkzeug]]&lt;br /&gt;
[[Kategorie:GNU-Paket]]&lt;/div&gt;</summary>
		<author><name>2001:9E8:6C63:2E01:3D9A:AD77:A542:EF8B</name></author>
	</entry>
</feed>