Mezon (oprogramowanie)

Mezon
Deweloperzy Jussi Pakkanen
Pierwsze wydanie 2 marca 2013 ; 10 lat temu ( 2013-03-02 )
Wersja stabilna
Edit this on Wikidata 1.0.0 / 23 grudnia 2022 ; 2 miesiące temu ( 23 grudnia 2022 )
Magazyn
Napisane w Pyton
System operacyjny Międzyplatformowe
Typ Narzędzia programistyczne
Licencja Licencja Apache 2.0
Strona internetowa mesonbuild.com _  Edit this on Wikidata

Meson ( / . m ɛ . s ɒ n / ) to narzędzie programowe do automatyzacji budowania (kompilacji) oprogramowania Ogólnym celem Mesona jest promowanie produktywności programistów. Meson jest darmowym i otwartym oprogramowaniem napisanym w języku Python na licencji Apache 2.0 .

Interoperacyjność

Napisany w Pythonie Meson działa na systemach operacyjnych typu Unix , w tym macOS , a także Microsoft Windows i innych systemach operacyjnych.

Meson obsługuje języki C , C++ , CUDA , D , Objective-C , Fortran , Java , C# , Rust i Vala oraz posiada mechanizm obsługi zależności o nazwie Wrap.

Meson obsługuje GNU Compiler Collection , Clang , Microsoft Visual C++ i inne kompilatory, w tym kompilatory nietradycyjne, takie jak Emscripten i Cython . Projekt wykorzystuje ninja jako podstawowy system budowania zaplecza, ale może również korzystać z zaplecza Microsoft Visual Studio lub Xcode .

Język

Składnia plików opisu kompilacji Mesona (język Meson) jest zapożyczona z Pythona , ale nie jest Pythonem: jest zaprojektowana w taki sposób, że można ją ponownie zaimplementować w dowolnym innym języku; na przykład muon jest implementacją C, a Meson++ jest implementacją C++ – zależność od Pythona to szczegół implementacji.

Język Meson celowo nie jest kompletny Turinga i dlatego nie może wyrazić dowolnego programu. Zamiast tego dowolne kroki kompilacji wykraczające poza kompilację obsługiwanych języków mogą być reprezentowane jako niestandardowe cele.

Język Meson jest silnie typowany , tak że wbudowane typy, takie jak biblioteka, plik wykonywalny, łańcuch znaków i ich listy, są niezamienne. W szczególności, w przeciwieństwie do Make, typ listy nie rozdziela ciągów na białe znaki. W ten sposób spacje i inne znaki w nazwach plików i argumentach programu są obsługiwane w sposób czysty.

Mezon CMake Robić
Typy danych Tak NIE NIE
Lista typów danych Tak ciąg rozdzielany średnikami ciąg rozdzielany spacjami
Typ danych słownika od 0,47,0 NIE NIE
Globalizacja plików NIE Tak Tak
Rozszerzalny dzięki niestandardowym funkcjom NIE Tak Tak
Może odczytywać dane wyjściowe dowolnych poleceń (w czasie konfiguracji) Uruchom polecenie Tak Tak
Może uruchamiać dowolne polecenia w czasie kompilacji jako receptury niestandardowych celów Tak Tak Tak

Szybkość i poprawność

Podobnie jak w przypadku każdego typowego systemu kompilacji, poprawna kompilacja przyrostowa jest najważniejszą cechą szybkości (ponieważ cały postęp przyrostowy jest odrzucany, gdy użytkownik jest zmuszony do wykonania czystej kompilacji).

W przeciwieństwie do samego Make, oddzielny krok konfiguracji zapewnia, że ​​zmiany argumentów, zmiennych środowiskowych i danych wyjściowych poleceń nie są częściowo stosowane w kolejnych kompilacjach, co prowadziłoby do przestarzałej kompilacji.

Podobnie jak Ninja, Meson nie obsługuje globowania plików źródłowych. Wymagając, aby wszystkie pliki źródłowe były wymienione w plikach definicji kompilacji, sygnatury czasowe pliku definicji kompilacji są wystarczające do określenia, czy zestaw plików źródłowych uległ zmianie, zapewniając w ten sposób wykrycie usuniętych plików źródłowych. CMake obsługuje globbing, ale odradza go z tego samego powodu.

Meson używa ccache automatycznie, jeśli jest zainstalowany. Wykrywa również zmiany w tablicach symboli bibliotek współdzielonych , aby pominąć ponowne łączenie plików wykonywalnych z biblioteką, gdy nie ma zmian ABI . Prekompilowane nagłówki są obsługiwane, ale wymagają konfiguracji. Kompilacje debugowania są domyślnie bez optymalizacji.

funkcja prędkości Mezon CMake Robić
Zabrania przestarzałych kompilacji (częściowa przebudowa przed zmianą danych wejściowych) Tak (chyba że są błędy) Jeśli nie globowanie plików źródłowych Recursive Make (wzorzec idiomatyczny) jest pod tym względem zepsuty
Cel, który uruchamia testy, zależy od budowanych testów (np. test zależy od wszystkich ) Tak Nie, a add_dependencies(test all) jest zabronione, ponieważ cel testu jest zarezerwowany. Banalne do dodania
Pamięć podręczna Automatyczny Banalne do dodania Banalne do dodania
Dystr Banalne do dodania Banalne do dodania Banalne do dodania
Ponowne łączenie uwzględniające tabelę symboli Tak Zrób to sam Zrób to sam
Prekompilowane nagłówki Opcjonalny CMake ≥ 3.16 Zrób to sam

Cechy

Deklarowanym celem Meson jest ułatwienie nowoczesnych praktyk rozwojowych. W związku z tym Meson wie, jak budować jedność , budować z pokryciem testowym , optymalizować czas łącza itp. Bez konieczności pisania wsparcia przez programistę.

Mezon CMake Autonarzędzia
Wygeneruj skrypt konfiguracyjny NIE NIE zrobić odległość
Ustaw poprawny katalog instalacyjny biblioteki na x86_64 Unix Automatyczny Niestandaryzowane ./configure --libdir=/usr/lib64

Podprojekty

Meson może automatycznie znajdować i używać zewnętrznych zależności za pomocą pkg-config , CMake i wyszukiwań specyficznych dla projektu, ale to znajduje tylko zainstalowane zależności, z którymi Meson nie może nic zrobić. Alternatywnie lub jako rozwiązanie awaryjne, zależność może być dostarczona jako podprojekt – projekt Meson w ramach innego, albo zawarty, albo jako link do pobrania, ewentualnie z poprawkami. Pozwala to Mesonowi rozwiązać piekło zależności dla wygody zwykłych użytkowników, którzy chcą skompilować projekt, ale mogą przyczynić się do rozdęcia oprogramowania gdyby zamiast tego można było użyć wspólnej zainstalowanej zależności. Trybem preferowanym przez osoby zajmujące się pakowaniem Linuksa jest zatem tryb awaryjny.

Meson obsługuje podprojekty Meson i CMake. Plik kompilacji Mesona może również odnosić się do usługi WrapDB.

Porównanie przypadków użycia rozwiązywania zależności w różnych systemach kompilacji
przypadek użycia Mezon CMake Ładunek
Znajdowanie zainstalowanych zależności pkg-config , pakiety CMake Moduł CMake, pkg-config ?
Automatyczne pobieranie zależności podprojekt Pobierz zawartość Zależność ładunku
Znajdowanie zainstalowanych zależności z awaryjnym pobieraniem pkg-config + podprojekt Moduł CMake/pkg-config + FetchContent ?
Generator plików pkg-config Tak NIE NIE
Ułatwienie użycia jako zależności do automatycznego pobrania Może być używany jako podprojekt Meson NIE Z rejestracją do skrzynek .io

Kompilacja krzyżowa

Kompilacja krzyżowa wymaga dodatkowej konfiguracji, którą Meson obsługuje w postaci oddzielnego pliku krzyżowego , który może być zewnętrzny w stosunku do projektu Meson.

Adoptowani

GNOME postawiło sobie za cel przeniesienie swoich projektów do Mesona. Od końca 2017 r. powłoka GNOME wymaga wyłącznie Mesona po porzuceniu Autotools, a główne komponenty, takie jak GTK+ , Clutter-GTK , GLib i GStreamer , można budować za pomocą Mesona.

Wiele projektów freedesktop.org przeszło na Meson. Systemd polega na Meson od czasu upuszczenia Autotools w wersji 234, a także X.Org i Mesa zostały przeniesione na Meson.

Wsparcie Mesona dla Fortran i Cython zostało ulepszone, aby pomóc różnym projektom naukowym w przejściu z narzędzi konfiguracyjnych na Meson, na przykład SciPy . Meson może być również używany jako backend PEP517 do tworzenia kół Pythona , poprzez pakiet meson-python .

Inne godne uwagi projekty wykorzystujące Meson to QEMU i Libvirt ; strona główna Meson zawiera listę dalszych projektów wykorzystujących Meson.

Zobacz też

Linki zewnętrzne