Ich kompiliere manchmal Apps aus dem Quellcode und verwende entweder:
./configure
make
sudo make install
Aber vor kurzem bin ich auf ./autogen.sh
das gestoßen, das das Konfigurieren und Erstellen von Skripten für mich generiert und diese ausführt.
Welche anderen Methoden zur Optimierung der C / C ++ / C # -Kompilierung (Mono) gibt es? Make scheint ein bisschen alt zu sein. Gibt es da draußen neue Tools? Welche soll ich bei der Auswahl verwenden?
compiling
programming
Louis Salin
quelle
quelle
autogen.sh
sind meist benutzerdefinierte Skripts, die in der Regel invokeautoreconf
aber auch berufen könnte./configure
und sogarmake
. Ich glaube nicht, dass sein Verhalten in irgendeiner Weise standardisiert ist. Der Hauptzweck ist es, eine ausführbare Datei innerhalb des Projekts zu haben, die die Leute ausführen können (anstatt zu wissen, dass sie sie heraufbeschwören müssenautoreconf
)Antworten:
Autoconf und Automake sollten ein evolutionäres Problem von Unix lösen.
Als sich Unix in verschiedene Richtungen entwickelte, neigten Entwickler, die portablen Code wollten, dazu, Code wie folgt zu schreiben:
Da Unix in verschiedene Implementierungen (BSD, SystemV, viele Herstellerforks und später Linux und andere Unix-ähnliche Systeme) eingebunden war, wurde es für Entwickler wichtig, portablen Code zu schreiben, um Code zu schreiben, der nicht von einer bestimmten Marke des Betriebssystems abhängt , aber auf Funktionen des Betriebssystems ausgesetzt. Dies ist wichtig, da eine Unix-Version eine neue Funktion einführen würde, zum Beispiel den Systemaufruf "send", und später andere Betriebssysteme dies übernehmen würden. Anstatt eine Spaghetti aus Code zu haben, die nach Marken und Versionen suchte, begannen die Entwickler, nach Funktionen zu suchen, sodass aus Code Folgendes wurde:
Die meisten README-Dateien zum Kompilieren von Quellcode in den 90er Jahren wiesen die Entwickler darauf hin, eine config.h-Datei zu bearbeiten und die auf dem System verfügbaren Funktionen zu kommentieren, oder es wurden Standard-config.h-Dateien für jede getestete Betriebssystemkonfiguration ausgeliefert.
Dieser Prozess war sowohl umständlich als auch fehleranfällig, und so entstand Autoconf. Sie sollten sich Autoconf als eine Sprache vorstellen, die aus Shell-Befehlen mit speziellen Makros besteht, die den menschlichen Bearbeitungsprozess der config.h durch ein Tool ersetzen konnten, das das Betriebssystem auf Funktionalität überprüft hat.
Normalerweise schreiben Sie Ihren Prüfcode in die Datei configure.ac und führen dann den Befehl autoconf aus, der diese Datei zu dem ausführbaren Befehl configure kompiliert, den Sie verwendet haben.
Während der Ausführung haben
./configure && make
Sie nach den auf Ihrem System verfügbaren Funktionen gesucht und anschließend die ausführbare Datei mit der erkannten Konfiguration erstellt.Als Open Source-Projekte mit Quellcode-Kontrollsystemen begannen, war es sinnvoll, die Datei configure.ac einzuchecken, nicht jedoch das Ergebnis der Kompilierung (configure). Die autogen.sh ist lediglich ein kleines Skript, das den autoconf-Compiler mit den richtigen Befehlsargumenten für Sie aufruft.
-
Automake ist auch aus bestehenden Praktiken in der Community gewachsen. Das GNU-Projekt standardisierte eine regelmäßige Reihe von Zielen für Makefiles:
make all
würde das Projekt bauenmake clean
würde alle kompilierten Dateien aus dem Projekt entfernenmake install
würde die Software installierenmake dist
undmake distcheck
würden die Quelle für die Verteilung vorbereiten und sicherstellen, dass das Ergebnis ein vollständiges Quellcode-Paket istDas Erstellen von kompatiblen Makefiles wurde mühsam, da es viele Boilerplates gab, die immer wieder wiederholt wurden. Automake war also ein neuer Compiler, der sich in autoconf integrierte und "Quell" -Makefiles (Makefile.am) in Makefiles verarbeitete, die dann an Autoconf weitergeleitet werden konnten.
Die Toolchain automake / autoconf verwendet tatsächlich eine Reihe anderer Hilfsprogramme, die durch andere Komponenten für andere spezifische Aufgaben erweitert werden. Als die Komplexität der Ausführung dieser Befehle in der richtigen Reihenfolge zunahm, wurde der Bedarf an einem sofort ausführbaren Skript geboren, von dem autogen.sh abstammt.
Soweit mir bekannt ist, war Gnome ein Projekt, das die Verwendung dieses Hilfsskripts autogen.sh eingeführt hat
quelle
In diesem Bereich gibt es zwei "Big Player". Cmake und GNU Autotools.
GNU Autotools ist die GNU-Methode, um Dinge zu tun, und konzentriert sich ziemlich auf * nix. Es ist eine Art Meta-Build-System, das eine Reihe von Tools bereitstellt, die spezifische Konfigurationen generieren und Dateien für das erstellen, was Sie tun möchten. Auf diese Weise können Sie mehr Änderungen an Ihrem Code vornehmen, ohne Ihr Build-System direkt manipulieren zu müssen, und andere können Ihren Code auf eine Weise erstellen, für die Sie nicht entworfen haben - unter * nix.
Cmake ist die plattformübergreifende Möglichkeit, Dinge zu tun. Das Cmake-Team erstellt Software auf viele verschiedene Arten, mit GCC, Visual Studio, XCode, Windows, OSX, Solaris, BSD, GNU / Linux, was auch immer. Wenn Sie überhaupt mit der Portabilität Ihrer Codebasis befasst sind, ist dies der richtige Weg.
Wie bereits erwähnt, scheinen einige Leute Scons zu mögen. Wenn Sie mit Python vertraut sind, sorgt dies möglicherweise für mehr Konsistenz in Ihrer Arbeitsumgebung.
Ruby hat auch eine Art Meta-Build-System namens Rake, das an sich ziemlich cool ist und sehr praktisch für diejenigen ist, die bereits mit Ruby vertraut sind.
quelle
Scons ist ein möglicher Ersatz, obwohl ich keine persönliche Erfahrung habe. Es ist auch in Python implementiert, was je nach Build-Umgebung ein Problem sein kann.
quelle
Wenn Sie C # / Mono verwenden, können Sie msbuild (die von MonoDevelop und Visual Studio verwendeten .sln / .csproj-Dateien) verwenden, um Ihren gesamten Erstellungsprozess zu verwalten.
Sie können dann entweder aus MonoDevelop erstellen oder den
xbuild
Befehl in Ihrem bevorzugten Terminal ausführen (funktioniert am besten in Mono> = 2.6). Dies ist extrem einfach und erfordert so gut wie keine Arbeit von Ihrer Seite, da MonoDevelop die msbuild-Dateien für Sie handhabt und Sie sie nicht bearbeiten müssen, es sei denn, Sie möchten Dinge optimieren, die über die Benutzeroberfläche von MonoDevelop hinausgehen.Ich bin nicht vertraut damit, wie Leute, die von msbuild abhängig sind, die Installationen für ihre Projekte handhaben, aber das könnte man immer fragen. ;-)
quelle
Für C # können Sie xbuild (und msbuild unter Windows) verwenden, um das Projekt aus Ihren Projektdateien zu erstellen.
quelle