Meson Build System Version 1.3

Die Veröffentlichung des Build-Systems Meson 1.3.0 wurde veröffentlicht, mit dem Projekte wie X.Org Server, Mesa, Lighttpd, systemd, GStreamer, Wayland, GNOME und GTK erstellt werden. Der Meson-Code ist in Python geschrieben und steht unter der Apache 2.0-Lizenz.

Das wichtigste Entwicklungsziel von Meson ist die Bereitstellung eines Hochgeschwindigkeitsmontageprozesses in Kombination mit Komfort und Benutzerfreundlichkeit. Anstelle von make verwendet der Build standardmäßig das Ninja-Toolkit, es können aber auch andere Backends wie xcode und VisualStudio verwendet werden. Das System verfügt über einen integrierten Multiplattform-Abhängigkeitshandler, der es Ihnen ermöglicht, Meson zum Erstellen von Paketen für Distributionen zu verwenden. Assemblerregeln werden in einer vereinfachten domänenspezifischen Sprache festgelegt, sie sind für den Benutzer gut lesbar und verständlich (nach der Idee der Autoren sollte der Entwickler möglichst wenig Zeit mit dem Schreiben von Regeln verbringen).

Cross-Kompilierung und Erstellung auf Linux, Illumos/Solaris, FreeBSD, NetBSD, DragonFly BSD, Haiku, macOS und Windows mit GCC, Clang, Visual Studio und anderen Compilern wird unterstützt. Es ist möglich, Projekte in verschiedenen Programmiersprachen zu erstellen, darunter C, C++, Fortran, Java und Rust. Es wird ein inkrementeller Build-Modus unterstützt, bei dem nur Komponenten neu erstellt werden, die in direktem Zusammenhang mit Änderungen stehen, die seit dem letzten Build vorgenommen wurden. Meson kann zum Generieren wiederholbarer Builds verwendet werden, wobei die Ausführung des Builds in verschiedenen Umgebungen dazu führt, dass völlig identische ausführbare Dateien generiert werden.

Wichtigste Neuerungen von Meson 1.3:

  • Den Compiler-Prüfmethoden Compiler.compiles(), Compiler.links() und Compiler.run() wurde die Option „werror: true“ hinzugefügt, die Compiler-Warnungen als Fehler behandelt (kann verwendet werden, um zu überprüfen, ob der Code ohne Warnungen erstellt wurde). ).
  • Methode has_define hinzugefügt, um die Symboldefinition durch den Präprozessor zu überprüfen.
  • Der Parameter „macro_name“ wurde zur Funktion „configure_file()“ hinzugefügt und fügt Makroschutz für Doppelverbindungen durch „#include“ („include Guards“) hinzu, der im Stil von Makros in der C-Sprache gestaltet ist (was die Erstellung von Konfigurationsdateien mit Dynamic vereinfacht Makronamen).
  • Ein neues Ausgabeformat wurde zu configure_file() hinzugefügt – JSON („output_format: json“).
  • Es wurde die Möglichkeit hinzugefügt, Wertelisten zu den Parametern c_std und cpp_std zu verwenden (z. B. „default_options: 'c_std=gnu11,c11'').
  • In Modulen, die CustomTarget zum Verarbeiten von Dateien verwenden, wurde die Möglichkeit hinzugefügt, die vom Ninja-Dienstprogramm ausgegebenen Nachrichten anzupassen.
  • Das build_target „jar“ ist veraltet und stattdessen wird der Aufruf „jar()“ empfohlen.
  • Der Parameter „env“ wurde zur Methode „generator.process()“ hinzugefügt, um die Umgebungsvariable festzulegen, über die der Generator Eingaben verarbeitet.
  • Bei der Angabe von Build-Zielnamen, die mit ausführbaren Dateien verknüpft sind, dürfen Suffixe wie „executable('foo', 'main.c', name_suffix: 'bar')" zusätzliche ausführbare Dateien im selben Verzeichnis generieren.
  • Der Parameter „vs_module_defs“ wurde zur Funktion exectuable() hinzugefügt, um eine Def-Datei zu verwenden, die die Liste der an shared_module() übergebenen Funktionen definiert.
  • Der Parameter „default_options“ wurde zur Funktion „find_program()“ hinzugefügt, um Standardoptionen für das Fallback-Unterprojekt festzulegen.
  • Methode fs.relative_to() hinzugefügt, die den relativen Pfad für das erste Argument relativ zum zweiten zurückgibt, wenn der erste Pfad existiert. Beispiel: „fs.relative_to('/prefix/lib', '/prefix/bin') == '../lib')".
  • Der Parameter Following_symlinks wurde zu den Funktionen install_data(), install_headers() und install_subdir() hinzugefügt; wenn er gesetzt ist, werden symbolische Links befolgt.
  • Der Methode int.to_string() wurde ein „fill“-Parameter hinzugefügt, um die Zeichenfolge schrittweise mit führenden Nullen zu füllen. Wenn Sie beispielsweise message(n.to_string(fill: 3)) für n=4 aufrufen, wird die Zeichenfolge „004“ erzeugt.
  • Ein neues Ziel, clang-tidy-fix, hinzugefügt, das die Ausführung des Dienstprogramms clang-tidy mit dem Flag „-fix“ angibt.
  • Dem Kompilierungsbefehl wurde die Möglichkeit hinzugefügt, das Suffix (TARGET_SUFFIX) des Assembly-Ziels ([PATH_TO_TARGET/]TARGET_NAME.TARGET_SUFFIX[:TARGET_TYPE]) anzugeben.
  • Umgebungsvariable MESON_PACKAGE_CACHE_DIR hinzugefügt, um beispielsweise den Pfad zum Paketcache (Unterprojekte/Paketcache) zu überschreiben, sodass Sie einen gemeinsamen Cache in mehreren Projekten verwenden können.
  • Befehl „meson setup --clearcache“ hinzugefügt, um den persistenten Cache zu löschen.
  • Die Unterstützung für das Schlüsselwort „required“ wurde zu allen „has_*“-Compiler-Prüfmethoden hinzugefügt. Anstelle von „assert(cc.has_function('some_function'))“ können Sie jetzt beispielsweise „cc.has_function('some_function'“ angeben. , erforderlich: wahr)“.
  • Den Funktionen shared_library(), static_library(),library() und shared_module() wurde ein neues Schlüsselwort, rust_abi, hinzugefügt, das anstelle des veralteten rust_crate_type verwendet werden sollte.

Source: opennet.ru

Kommentar hinzufügen