Meson (Software) - Meson (software)

Meson
Logo seit 2019
Logo seit 2019
Meson 0.58.0 screenshot.png
Meson konfigurieren dav1d
Entwickler Jussi Pakkanen
Erstveröffentlichung 2. März 2013 ; Vor 8 Jahren ( 2013-03-02 )
Stabile Version
0.59.0 / 17. Juli 2021 ; vor 3 Monaten ( 2021-07-17 )
Repository
Geschrieben in Python
Betriebssystem Plattformübergreifend
Typ Softwareentwicklungstools
Lizenz Apache-Lizenz 2.0
Webseite mesonbuild .com Bearbeiten Sie dies auf Wikidata

Meson ( / m ɛ . S ɒ n / ) ist ein Software - Tool für das Gebäude zu automatisieren (Kompilieren) von Software. Das übergeordnete Ziel von Meson besteht darin, die Produktivität der Programmierer zu fördern. Meson ist eine kostenlose Open-Source-Software, die in Python geschrieben ist und unter der Apache-Lizenz 2.0 steht .

Interoperabilität

In Python geschrieben, läuft Meson nativ auf Unix- ähnlichen Betriebssystemen, einschließlich macOS , sowie Microsoft Windows und auf anderen Betriebssystemen.

Meson unterstützt die Sprachen C , C++ , CUDA , D , Objective-C , Fortran , Java , C# , Rust und Vala und verfügt über einen Mechanismus zur Behandlung von Abhängigkeiten namens Wrap.

Meson unterstützt die GNU Compiler Collection , Clang , Microsoft Visual C++ und andere Compiler. Das Projekt verwendet Ninja als primäres Backend-Buildsystem, kann aber auch Microsoft Visual Studio oder Xcode- Backends verwenden.

Sprache

Die Syntax der Build-Beschreibungsdateien von Meson (der Meson-Sprache) ist von Python übernommen , aber nicht Python: Sie ist so konzipiert, dass sie in jeder anderen Sprache reimplementiert werden kann; Meson++ ist beispielsweise eine C++-Implementierung – die Abhängigkeit von Python ist ein Implementierungsdetail.

Die Meson-Sprache ist absichtlich nicht Turing-vollständig und kann daher kein beliebiges Programm ausdrücken. Stattdessen können beliebige Build-Schritte, die über das Kompilieren unterstützter Sprachen hinausgehen, als benutzerdefinierte Ziele dargestellt werden.

Die Meson-Sprache ist stark typisiert , sodass eingebaute Typen wie Bibliothek, ausführbare Datei, String und Listen davon nicht austauschbar sind. Insbesondere trennt der Listentyp im Gegensatz zu Make keine Zeichenfolgen auf Leerzeichen. Daher werden Leerzeichen und andere Zeichen in Dateinamen und Programmargumenten sauber behandelt.

Meson CMake Machen
Datentypen Jawohl Nein Nein
Datentyp auflisten Jawohl durch Semikolon getrennte Zeichenfolge durch Leerzeichen getrennte Zeichenfolge
Wörterbuchdatentyp seit 0.47.0 Nein Nein
Dateiglobbing Nein Jawohl Jawohl
Erweiterbar über benutzerdefinierte Funktionen Nein Jawohl Jawohl
Kann die Ausgabe beliebiger Befehle lesen (zur Konfigurationszeit) Führen Sie den Befehl aus Jawohl Jawohl
Kann zur Build-Zeit beliebige Befehle als Rezepte für benutzerdefinierte Ziele ausführen Jawohl Jawohl Jawohl

Geschwindigkeit und Korrektheit

Wie bei jedem typischen Buildsystem sind korrekte inkrementelle Builds das wichtigste Geschwindigkeitsmerkmal (da der gesamte inkrementelle Fortschritt verworfen wird, wenn der Benutzer gezwungen ist, einen sauberen Build durchzuführen).

Im Gegensatz zum bloßen Make stellt der separate Konfigurationsschritt sicher, dass Änderungen an Argumenten, Umgebungsvariablen und Befehlsausgaben nicht teilweise in nachfolgenden Builds übernommen werden, was zu einem veralteten Build führen würde.

Wie Ninja unterstützt Meson kein Globbing von Quelldateien. Da alle Quelldateien in den Build-Definitionsdateien aufgelistet werden müssen, reichen die Zeitstempel der Build-Definitionsdatei aus, um festzustellen, ob sich der Satz von Quelldateien geändert hat, wodurch sichergestellt wird, dass entfernte Quelldateien erkannt werden. CMake unterstützt Globbing, rät aber aus dem gleichen Grund davon ab.

Meson verwendet ccache automatisch, wenn es installiert ist. Es erkennt auch Änderungen an Symboltabellen von gemeinsam genutzten Bibliotheken , um das erneute Verknüpfen von ausführbaren Dateien mit der Bibliothek zu überspringen, wenn keine ABI- Änderungen vorliegen . Vorkompilierte Header werden unterstützt, erfordern jedoch eine Konfiguration. Debug-Builds sind standardmäßig ohne Optimierung.

Geschwindigkeitsfunktion Meson CMake Machen
Verbietet veraltete Builds (teilweise Rebuild gegen Eingabeänderung) Ja (es sei denn, es gibt Fehler) Wenn keine Quelldateien globbing Rekursives Make (ein idiomatisches Muster) wird in dieser Hinsicht gebrochen
Das Ziel, das Tests ausführt, hängt von den Tests ab, die erstellt werden
(z. B. testhängt von ab all)
Jawohl Nein, und add_dependencies(test all)ist verboten,
da das testZiel reserviert ist.
Trivial zum Hinzufügen
Cache Automatisch Trivial zum Hinzufügen Trivial zum Hinzufügen
Distcc Trivial zum Hinzufügen Trivial zum Hinzufügen Trivial zum Hinzufügen
Symboltabellen-bewusste Neuverknüpfung Jawohl Mach es selbst Mach es selbst
Vorkompilierte Header Optional CMake 3.16 Mach es selbst

Merkmale

Ein erklärtes Ziel von Meson ist es, moderne Entwicklungspraktiken zu erleichtern. Als solches weiß Meson, wie man Unity-Builds , Builds mit Testabdeckung , Link-Time-Optimierung usw. durchführt, ohne dass der Programmierer dafür Unterstützung schreiben muss.

Meson CMake Autotools
Ein configureSkript erstellen Nein Nein machen dist
Legen Sie das richtige Bibliotheksinstallationsverzeichnis auf x86_64 Unix fest Automatisch Nicht standardisiert ./configure --libdir=/usr/lib64

Teilprojekte

Meson kann über pkg-config automatisch externe Abhängigkeiten finden und verwenden , dies findet jedoch nur installierte Abhängigkeiten, an denen Meson nichts ändern kann. Alternativ oder als Fallback kann eine Abhängigkeit als Teilprojekt bereitgestellt werden – ein Meson-Projekt in einem anderen, entweder enthalten oder als Download-Link, ggf. mit Patches. Auf diese Weise kann Meson die Abhängigkeitshölle für Gelegenheitsbenutzer auflösen , die das Projekt kompilieren möchten, aber möglicherweise zum Aufblähen der Software beitragen, wenn stattdessen eine gemeinsame installierte Abhängigkeit hätte verwendet werden können. Der von Linux-Paketierern bevorzugte Modus ist daher Fallback.

Meson unterstützt Meson- und CMake-Unterprojekte. Eine Meson-Build-Datei kann auch auf den WrapDB-Dienst verweisen.

Vergleich von Anwendungsfällen zur Abhängigkeitsauflösung in verschiedenen Build-Systemen
Anwendungsfall Meson CMake Ladung
Finden installierter Abhängigkeiten pkg-config, CMake-Pakete CMake-Modul, pkg-config ?
Abhängigkeiten automatisch herunterladen Teilprojekt Inhalt abrufen Frachtabhängigkeit
Auffinden installierter Abhängigkeiten mit Download-Fallback pkg-config + Unterprojekt CMake-Modul/pkg-config + FetchContent ?
pkg-config-Dateigenerator Jawohl Nein Nein
Erleichtern Sie die Verwendung als automatisch herunterladbare Abhängigkeit Kann als Meson-Teilprojekt verwendet werden Nein Mit Registrierung bei crates.io

Cross-Zusammenstellung

Cross-Kompilierung erfordert eine zusätzliche Konfiguration, die Meson in Form einer separaten Cross-Datei unterstützt , die außerhalb des Meson-Projekts liegen kann.

Adoptierte

GNOME hat es sich zum Ziel gesetzt, seine Projekte auf Meson zu portieren. Seit Ende 2017 benötigt GNOME Shell selbst ausschließlich Meson, nachdem Autotools aufgegeben wurde, und zentrale Komponenten wie GTK+ , Clutter-GTK , GLib und GStreamer können mit Meson erstellt werden.

Systemd verlässt sich auf Meson, seit die Autotools in Version 234 fallengelassen wurden.

Auch X.Org und Mesa wurden nach Meson portiert.

Auf der Meson-Homepage sind weitere Projekte aufgeführt, die Meson verwenden.

Siehe auch

Verweise

Externe Links