stringtranslate.com

Мезон (программное обеспечение)

Мезон ( / ˈ m ɛ . s ɒ n / ) [2] — программный инструмент для автоматизации сборки (компиляции) программного обеспечения. Общая цель Meson — повысить производительность программистов. [3] Meson — это бесплатное программное обеспечение с открытым исходным кодом , написанное на Python под лицензией Apache 2.0 . [4]

Совместимость

Будучи написанным на Python, Meson работает в Unix -подобных операционных системах, включая macOS , а также в Microsoft Windows и других операционных системах.

Meson поддерживает языки C , C++ , CUDA , D , Objective-C , Fortran , Java , C# , Rust и Vala [5] и имеет механизм обработки зависимостей , называемый Wrap.

Meson поддерживает GNU Compiler Collection , Clang , Microsoft Visual C++ и другие компиляторы, включая нетрадиционные компиляторы, такие как Emscripten и Cython . [6] В проекте используется ninja в качестве основной серверной системы сборки, но также можно использовать серверные части Microsoft Visual Studio или Xcode .

Язык

Синтаксис файлов описания сборки Meson (язык Meson) заимствован из Python , но не является Python: он спроектирован таким образом, что его можно переопределить на любом другом языке; [7] например, muon [8] — это реализация C, а Meson++ [9] — реализация C++, а зависимость от Python — это деталь реализации.

Язык Meson намеренно не является полным по Тьюрингу и поэтому не может выражать произвольную программу. [7] Вместо этого произвольные шаги сборки, выходящие за рамки компиляции поддерживаемых языков, могут быть представлены как пользовательские цели.

Язык Meson строго типизирован , поэтому встроенные типы, такие как библиотека, исполняемый файл, строка и их списки, не являются взаимозаменяемыми. [10] В частности, в отличие от Make, тип списка не разбивает строки по пробелам. [7] Таким образом, пробелы и другие символы в именах файлов и аргументах программы обрабатываются аккуратно.

Скорость и корректность

Как и в любой типичной системе сборки, правильная инкрементная сборка является наиболее важным фактором скорости (поскольку весь инкрементный прогресс отменяется всякий раз, когда пользователю приходится выполнять чистую сборку).

В отличие от простого Make, отдельный шаг настройки гарантирует, что изменения в аргументах, переменных среды и выводе команды не будут частично применены в последующих сборках, что может привести к устаревшей сборке.

Как и Ninja, Meson не поддерживает подстановку исходных файлов. [7] Требование, чтобы все исходные файлы были перечислены в файлах определения сборки, временных меток файла определения сборки достаточны для определения того, изменился ли набор исходных файлов, тем самым гарантируя обнаружение удаленных исходных файлов. CMake поддерживает подстановку, но не рекомендует ее использовать по той же причине. [11]

Meson автоматически использует ccache , если он установлен. Он также обнаруживает изменения в таблицах символов общих библиотек , чтобы пропустить повторное связывание исполняемых файлов с библиотекой при отсутствии изменений ABI . Предварительно скомпилированные заголовки поддерживаются, но требуют настройки. Отладочные сборки по умолчанию не оптимизированы.

Функции

Заявленная цель Meson — способствовать современным практикам разработки. Таким образом, Meson знает, как выполнять сборки Unity , сборки с тестовым покрытием , оптимизацию времени компоновки и т. д. без необходимости писать для этого программисту поддержку.

Подпроекты

Meson может автоматически находить и использовать внешние зависимости через pkg-config , CMake и поиск по конкретному проекту [15] , но при этом обнаруживаются только установленные зависимости, с которыми Meson ничего не может поделать. В качестве альтернативы или в качестве запасного варианта зависимость может быть предоставлена ​​в виде подпроекта проекта Meson внутри другого, либо в виде ссылки, либо в виде ссылки для загрузки, возможно, с исправлениями. [16] Это позволяет Meson разрешить ад зависимостей для удобства случайных пользователей, желающих скомпилировать проект, но может способствовать раздуванию программного обеспечения , если вместо этого можно было бы использовать общую установленную зависимость. Поэтому режим, предпочитаемый упаковщиками Linux, является запасным. [17]

Meson поддерживает подпроекты Meson и CMake. Файл сборки Meson также может ссылаться на сервис WrapDB. [16]

Сравнение вариантов использования разрешения зависимостей в разных системах сборки

Кросс-компиляция

Кросс-компиляция требует дополнительной настройки, которую Meson поддерживает в виде отдельного кросс-файла , который может быть внешним по отношению к проекту Meson. [19]

Усыновители

GNOME поставил перед собой цель перенести свои проекты на Meson. [20] По состоянию на конец 2017 года сама GNOME Shell требует исключительно Meson после отказа от Autotools, [21] и центральные компоненты, такие как GTK+ , Clutter-GTK , GLib и GStreamer , могут быть созданы с помощью Meson. [20]

Многие проекты freedesktop.org перешли на Meson. Systemd полагается на Meson после отказа от Autotools в версии 234, [22] , а также X.Org [23] и Mesa [24] были портированы на Meson.

Поддержка Meson Fortran и Cython была улучшена, чтобы помочь различным научным проектам при переходе от setuptools к Meson, например SciPy . [25] Meson также можно использовать в качестве бэкэнда PEP517 для создания колес Python с помощью пакета meson-python . [26]

Другие известные проекты, использующие Meson, включают QEMU и PostgreSQL ; на домашней странице Meson перечислены другие проекты, использующие Meson. [27]

Смотрите также

Рекомендации

  1. ^ «Выпуск 1.3.2» . Проверено 17 февраля 2024 г.
  2. ^ ab «Как сделать системы сборки не отстойными (видео linux.conf.au)» . YouTube .
  3. ^ «Высокопроизводительная система сборки» . Meson стремится оптимизировать производительность программистов, предоставляя простую, готовую к использованию поддержку современных инструментов и методов разработки программного обеспечения, таких как модульные тесты, отчеты о покрытии, Valgrind, CCache и тому подобное.
  4. ^ «mesonbuild/meson: Система сборки мезонов» . Гитхаб . Проверено 13 апреля 2016 г.
  5. ^ «Справочное руководство».
  6. ^ «Идентификаторы компилятора».
  7. ^ abcd «Часто задаваемые вопросы по мезону».
  8. ^ muon.build , получено 27 января 2023 г.
  9. Бейкер, Дилан (28 мая 2021 г.), dcbaker/meson-plus-plus , получено 28 мая 2021 г.
  10. ^ «Синтаксис мезонов».
  11. ^ «Команда CMake FILE» . Примечание. Мы не рекомендуем использовать GLOB для сбора списка исходных файлов из вашего дерева исходного кода. Если файл CMakeLists.txt не изменяется при добавлении или удалении источника, созданная система сборки не может знать, когда просить CMake выполнить повторную генерацию.
  12. ^ «Нерекурсивный способ считать вредным» (PDF) . Майкрософт . Рекурсивное выполнение Make считается вредным по очень веским причинам (Miller 1998); невозможно точно отслеживать зависимости, если система сборки состоит из отдельных компонентов, вызывающих друг друга.
  13. ^ «Make test не зависит от make all». Трекер проблем с комплектным ПО . 23 июня 2016 г. Проверено 3 сентября 2020 г.
  14. ^ «Поддержка CMake для предварительно скомпилированных заголовков» . Проверено 13 марта 2018 г.
  15. ^ «Зависимости с настраиваемой функцией поиска — документация Meson».
  16. ^ ab «Руководство по системе зависимостей переноса».
  17. ^ «Мезон и сторонние зависимости. Только один правильный путь» .
  18. ^ «FetchContent — Документация CMake 3.15.7» .
  19. ^ «Кросс-компиляция».
  20. ^ ab «Цель GNOME: портировать модули для использования системы сборки Meson».
  21. ^ «Дебют бета-версии GNOME 3.26: больше переноса мезонов, действие Wayland» .
  22. ^ «Отказ от поддержки autotools» . Гитхаб .
  23. ^ «Поддержка мезонов появилась на сервере X.Org» .
  24. ^ «Разработчики Mesa приближаются к отказу от системы сборки Autotools в пользу Meson» .
  25. ^ «Как построить SciPy с помощью Meson».
  26. ^ «Пакет мезон-питона на PyPI» .
  27. ^ «Список проектов, использующих Meson».

Внешние ссылки