Mezon (oprogramowanie)
Deweloperzy | Jussi Pakkanen |
---|---|
Pierwsze wydanie | 2 marca 2013 |
Wersja stabilna | |
Magazyn | |
Napisane w | Pyton |
System operacyjny | Międzyplatformowe |
Typ | Narzędzia programistyczne |
Licencja | Licencja Apache 2.0 |
Strona internetowa |
|
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 |
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.