Verwendung mehrerer Build-Verzeichnisse
Eines der Hauptdesignziele von Meson war es, alle Projekte "out-of-source" zu bauen. Das bedeutet, dass alle während des Builds generierten Dateien in einem separaten Unterverzeichnis platziert werden. Dies widerspricht der gängigen Unix-Tradition, bei der Projekte "in-source" gebaut werden. Der "out-of-source"-Build bietet zwei Hauptvorteile.
Erstens macht dies die "ignore"-Dateien für Versionskontrollsysteme sehr einfach. In klassischen Build-Systemen benötigen Sie möglicherweise Dutzende von Zeilen an Definitionen, von denen die meisten Wildcards enthalten. Bei "out-of-source"-Builds entfällt dieser ganze unnötige Aufwand. Eine gängige Ignore-Datei für ein Meson-Projekt enthält nur wenige Zeilen, die sich auf das Build-Verzeichnis und IDE-Projektdaten beziehen. (Beachten Sie, dass seit Meson 0.57.0 Build-Verzeichnisse für Git und Mercurial automatisch ignoriert werden, indem eine Ignore-Datei innerhalb des Build-Verzeichnisses generiert wird.)
Zweitens macht dies die Bereinigung Ihrer Projekte sehr einfach: Löschen Sie einfach das Build-Unterverzeichnis, und Sie sind fertig. Sie müssen nicht raten, ob Sie make clean, make distclean, make mrproper oder etwas anderes ausführen müssen. Wenn Sie ein Build-Unterverzeichnis löschen, gibt es keine Möglichkeit, dass Zustände aus Ihren alten Builds übrig bleiben.
Der wirkliche Vorteil kommt jedoch von woanders.
Mehrere Build-Verzeichnisse für denselben Quellbaum
Da ein Build-Verzeichnis vollständig in sich abgeschlossen ist und den Quellbaum als schreibgeschütztes Datum behandelt, können Sie beliebig viele Build-Bäume für einen beliebigen Quellbaum gleichzeitig haben. Da alle Build-Bäume unterschiedliche Konfigurationen haben können, ist dies äußerst leistungsfähig. Nun fragen Sie sich vielleicht, warum man gleichzeitig mehrere Build-Setups haben möchte. Betrachten wir dies anhand eines hypothetischen Projekts.
Das erste, was zu tun ist, ist das Standard-Build einzurichten, also das, das wir über 90 % der Zeit verwenden werden. Hier verwenden wir den Systemcompiler und bauen mit aktiviertem Debugging und ohne Optimierungen, damit er so schnell wie möglich baut. Dies ist der Standardprojekt-Typ für Meson, daher ist die Einrichtung einfach.
mkdir builddir
meson setup builddir
Ein weiterer gängiger Setup ist der Build mit Debugging und Optimierungen, um beispielsweise Leistungstests durchzuführen. Die Einrichtung ist genauso einfach.
mkdir buildopt
meson --buildtype=debugoptimized buildopt
Für Systeme, bei denen der Standardcompiler GCC ist, möchten wir auch mit Clang kompilieren. Tun wir das also.
mkdir buildclang
CC=clang CXX=clang++ meson setup buildclang
Sie können auch Cross-Builds hinzufügen. Als Beispiel richten wir einen Linux -> Windows Cross-Compilation-Build mit MinGW ein.
mkdir buildwine
meson --cross-file=mingw-cross.txt buildwine
Die Cross-Compilation-Datei richtet Wine so ein, dass Sie nicht nur Ihre Anwendung kompilieren, sondern auch die Unit-Test-Suite ausführen können, indem Sie einfach den Befehl meson test ausführen.
Um einen dieser Build-Typen zu kompilieren, wechseln Sie einfach in das entsprechende Build-Verzeichnis und führen Sie meson compile aus oder weisen Sie Ihre IDE an, dasselbe zu tun. Beachten Sie, dass Sie, sobald Sie Ihr Build-Verzeichnis einmal eingerichtet haben, einfach Ninja ausführen können und Meson sicherstellt, dass der resultierende Build gemäß der Quelle vollständig auf dem neuesten Stand ist. Selbst wenn Sie eines der Verzeichnisse wochenlang nicht berührt haben und wesentliche Änderungen an Ihrer Build-Konfiguration vorgenommen haben, erkennt Meson dies und bringt das Build-Verzeichnis auf den neuesten Stand (oder gibt einen Fehler aus, wenn dies nicht möglich ist). Dies ermöglicht es Ihnen, den Großteil Ihrer Arbeit im Standardverzeichnis zu erledigen und die anderen gelegentlich zu nutzen, ohne Ihre Build-Verzeichnisse beaufsichtigen zu müssen.
Spezialisierte Anwendungen
Separate Build-Verzeichnisse ermöglichen eine einfache Integration für verschiedene Arten von Tools. Als Beispiel kommt Clang mit einem statischen Analysator. Er ist dazu gedacht, von Grund auf auf einem gegebenen Quellbaum ausgeführt zu werden. Die Schritte zur Ausführung mit Meson sind sehr einfach.
rm -rf buildscan
mkdir buildscan
scan-build meson setup buildscan
cd buildscan
scan-build ninja
Diese Befehle sind für jedes Meson-Projekt gleich, sodass sie sogar in ein Skript aufgenommen werden könnten, das die statische Analyse zu einem einzigen Befehl macht.
Die Ergebnisse der Suche sind