Wersja systemu kompilacji Meson 1.3

Opublikowano wydanie systemu kompilacji Meson 1.3.0, który służy do budowania projektów takich jak X.Org Server, Mesa, Lighttpd, systemd, GStreamer, Wayland, GNOME i GTK. Kod Mesona jest napisany w Pythonie i jest licencjonowany na licencji Apache 2.0.

Kluczowym celem rozwojowym Mesona jest zapewnienie szybkiego procesu montażu połączonego z wygodą i łatwością użytkowania. Zamiast make kompilacja domyślnie korzysta z zestawu narzędzi Ninja, ale można również użyć innych backendów, takich jak xcode i VisualStudio. System ma wbudowany wieloplatformowy moduł obsługi zależności, który pozwala używać Mesona do budowania pakietów dla dystrybucji. Reguły asemblera są sformułowane w uproszczonym, specyficznym dla domeny języku, są dobrze czytelne i zrozumiałe dla użytkownika (według pomysłu autorów programista powinien poświęcić minimum czasu na napisanie reguł).

Obsługiwana jest kompilacja krzyżowa i budowanie w systemach Linux, Illumos/Solaris, FreeBSD, NetBSD, DragonFly BSD, Haiku, macOS i Windows przy użyciu GCC, Clang, Visual Studio i innych kompilatorów. Możliwe jest budowanie projektów w różnych językach programowania, w tym C, C++, Fortran, Java i Rust. Obsługiwany jest tryb budowania przyrostowego, w którym odbudowywane są tylko komponenty, które są bezpośrednio związane ze zmianami wprowadzonymi od czasu ostatniej kompilacji. Meson może być używany do generowania powtarzalnych kompilacji, gdzie uruchamianie kompilacji w różnych środowiskach skutkuje całkowicie identycznymi plikami wykonywalnymi.

Główne innowacje Mesona 1.3:

  • Dodano opcję „werror: true” do metod sprawdzania kompilatora: busy.compiles(), kompilator.links() i kompilator.run(), które traktują ostrzeżenia kompilatora jako błędy (można ich użyć do sprawdzenia, czy kod został zbudowany bez ostrzeżeń ).
  • Dodano metodę has_define sprawdzającą definicję symbolu przez preprocesor.
  • Do funkcjiconfigure_file() dodano parametr nazwa_makra, dodający ochronę makr dla podwójnych połączeń poprzez „#include” („includeguards”), zaprojektowany w stylu makr w języku C (ułatwiający tworzenie plików konfiguracyjnych z dynamiczną nazwy makr).
  • Do konfiguracji_file() dodano nowy format wyjściowy - JSON („format_wyjściowy: json”).
  • Dodano możliwość użycia list wartości do parametrów c_std i cpp_std (na przykład „default_options: 'c_std=gnu11,c11′’).
  • W modułach, które wykorzystują CustomTarget do przetwarzania plików, dodano możliwość dostosowywania komunikatów wysyłanych przez narzędzie ninja.
  • Funkcja build_target „jar” stała się przestarzała i zamiast niej zalecane jest wywołanie „jar()”.
  • Do metody generator.process() dodano parametr „env” w celu ustawienia zmiennej środowiskowej, poprzez którą generator będzie przetwarzał dane wejściowe.
  • Podczas określania nazw docelowych kompilacji powiązanych z plikami wykonywalnymi, przyrostki takie jak „plik wykonywalny („foo”, „main.c”, przyrostek nazwy: „bar”) mogą generować dodatkowe pliki wykonywalne w tym samym katalogu.
  • Do funkcji exectuable() dodano parametr „vs_module_defs”, aby użyć pliku def, który definiuje listę funkcji przekazywanych do funkcjishared_module().
  • Dodano parametr „default_options” do funkcji find_program(), aby ustawić domyślne opcje dla podprojektu rezerwowego.
  • Dodano metodę fs.relative_to(), która zwraca ścieżkę względną dla pierwszego argumentu w stosunku do drugiego, jeśli istnieje pierwsza ścieżka. Na przykład „fs.relative_to('/prefix/lib', '/prefix/bin') == '../lib')".
  • Do funkcji install_data(), install_headers() i install_subdir() dodano parametr następujący_symlinks; gdy jest ustawiony, podążane są dowiązania symboliczne.
  • Do metody int.to_string() dodano parametr „fill”, umożliwiający przyrostowe wypełnianie ciągu zerami wiodącymi. Na przykład wywołanie Message(n.to_string(fill: 3)) dla n=4 spowoduje wygenerowanie ciągu znaków „004”.
  • Dodano nowy cel, clang-tidy-fix, który określa uruchomienie narzędzia clang-tidy z flagą „-fix”.
  • Do polecenia kompilacji dodano możliwość określenia przyrostka (TARGET_SUFFIX) celu zestawu ([PATH_TO_TARGET/]NAZWA_TARGET.TARGET_SUFFIX[:TARGET_TYPE]).
  • Dodano zmienną środowiskową MESON_PACKAGE_CACHE_DIR, aby zastąpić ścieżkę do pamięci podręcznej pakietów (podprojekty/packagecache), na przykład umożliwiając korzystanie ze współdzielonej pamięci podręcznej w kilku projektach.
  • Dodano polecenie „meson setup --clearcache”, aby wyczyścić trwałą pamięć podręczną.
  • Do wszystkich metod sprawdzania kompilatora „has_*” dodano obsługę słowa kluczowego „required”, na przykład zamiast „assert(cc.has_function('some_function'))” można teraz określić „cc.has_function('some_function' , wymagane: prawda)”.
  • Do funkcji Shared_library(), static_library(), Library() i Shared_module() dodano nowe słowo kluczowe, rust_abi, którego należy używać zamiast przestarzałej funkcji rust_crate_type.

Źródło: opennet.ru

Dodaj komentarz