Мезон (программное обеспечение)
Разработчик(и) | Юсси Пакканен |
---|---|
Первоначальный выпуск | 2 марта 2013 г |
Стабильная версия | 1.5.0 [1] / 10 июля 2024 г |
Репозиторий | |
Написано в | Питон |
Операционная система | Кросс-платформенный |
Тип | Инструменты разработки программного обеспечения |
Лицензия | Лицензия Апач 2.0 |
Веб-сайт | мезонбилд |
Мезон ( / ˈ 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] например, мюон [8] это реализация C, а Meson++ [9] это реализация C++. Зависимость от Python — это деталь реализации.
Язык Meson намеренно не является полным по Тьюрингу и поэтому не может выражать произвольную программу. [7] Вместо этого произвольные шаги сборки, выходящие за рамки компиляции поддерживаемых языков, могут быть представлены как пользовательские цели.
Язык Meson строго типизирован , поэтому встроенные типы, такие как библиотека, исполняемый файл, строка и их списки, не являются взаимозаменяемыми. [10] В частности, в отличие от Make, тип списка не разбивает строки по пробелам. [7] Таким образом, пробелы и другие символы в именах файлов и аргументах программы обрабатываются аккуратно.
Особенность | Мезон | CMake | Делать |
---|---|---|---|
Типы данных | Да | Нет | Нет |
Список типов данных | Да | строка, разделенная точкой с запятой | строка, разделенная пробелами |
Тип данных словаря | с 0.47.0 | Нет | Нет |
Подстановка файлов | Нет | Да | Да |
Расширяемо с помощью пользовательских функций | Нет | Да | Да |
Может читать вывод произвольных команд (во время настройки) | run_command | Да | Да |
Может запускать произвольные команды во время сборки в качестве рецептов пользовательских целей. | Да | Да | Да |
Скорость и корректность
[ редактировать ]Как и в любой типичной системе сборки, правильная инкрементальная сборка является наиболее важной характеристикой скорости (поскольку весь инкрементный прогресс отменяется всякий раз, когда пользователю приходится выполнять чистую сборку).
В отличие от простого Make, отдельный шаг настройки гарантирует, что изменения в аргументах, переменных среды и выводе команды не будут частично применены в последующих сборках, что может привести к устаревшей сборке.
Как и Ninja, Meson не поддерживает подстановку исходных файлов. [7] Требуя, чтобы все исходные файлы были перечислены в файлах определения сборки, временные метки файла определения сборки достаточны для определения того, изменился ли набор исходных файлов, тем самым гарантируя обнаружение удаленных исходных файлов. CMake поддерживает подстановку, но не рекомендует ее использовать по той же причине. [11]
Meson автоматически использует ccache , если он установлен. Он также обнаруживает изменения в таблицах символов общих библиотек, чтобы пропустить повторное связывание исполняемых файлов с библиотекой при отсутствии изменений ABI . Предварительно скомпилированные заголовки поддерживаются, но требуют настройки. Отладочные сборки по умолчанию не оптимизированы.
Этот раздел нуждается в дополнительных цитатах для проверки . ( Март 2024 г. ) |
Возможно, этот раздел содержит оригинальные исследования . ( Март 2024 г. ) |
функция скорости | Мезон | CMake | Делать |
---|---|---|---|
Запрещает устаревшие сборки (частичная перестройка при изменении входных данных). | Да (если нет ошибок) [ противоречивый ] | Если не использовать исходные файлы [ нужна ссылка ] | Рекурсивный Make (идиоматический шаблон) в этом отношении не работает. [12] |
Цель, которая запускает тесты, зависит от создаваемых тестов (например, test зависит от all ) | Да [ нужна ссылка ] | Нет, и add_dependencies(test all) запрещено, поскольку test цель зарезервирована. [13] | Тривиально добавить [ нужна ссылка ] |
Кэш | Автоматический [ нужна ссылка ] | Тривиально добавить [ нужна ссылка ] | Тривиально добавить [ нужна ссылка ] |
Distcc | Тривиально добавить [ нужна ссылка ] | Тривиально добавить [ нужна ссылка ] | Тривиально добавить [ нужна ссылка ] |
Перелинковка с учетом таблиц символов | Да [ нужна ссылка ] | Сделай это сам [ нужна ссылка ] | Сделай это сам [ нужна ссылка ] |
Предварительно скомпилированные заголовки | Необязательный [ нужна ссылка ] | CMake ≥ 3,16 [14] [2] | Сделай это сам [ нужна ссылка ] |
Функции
[ редактировать ]Заявленная цель Meson — способствовать современным практикам разработки. Таким образом, Meson знает, как выполнять сборки Unity , сборки с тестовым покрытием , оптимизацию времени компоновки и т. д. без необходимости писать для этого программисту поддержку.
Мезон | CMake | Автоинструменты | |
---|---|---|---|
Создать configure сценарий | Нет | Нет | make dist |
Установите правильный каталог установки библиотеки в x86_64 Unix | Автоматический | Не стандартизировано | ./configure --libdir=/usr/lib64 |
Подпроекты
[ редактировать ]Meson может автоматически находить и использовать внешние зависимости с помощью pkg-config , CMake и поиска по конкретному проекту. [15] но это находит только установленные зависимости, с которыми Meson ничего не может поделать.В качестве альтернативы или в качестве запасного варианта зависимость может быть предоставлена в виде подпроекта — проекта Meson внутри другого, либо в виде ссылки, либо в виде ссылки для загрузки, возможно, с исправлениями. [16] Это позволяет Meson разрешить ад зависимостей для удобства случайных пользователей, желающих скомпилировать проект, но может способствовать раздуванию программного обеспечения , если вместо этого можно было бы использовать общую установленную зависимость. Поэтому режим, предпочитаемый упаковщиками Linux, является запасным. [17]
Meson поддерживает подпроекты Meson и CMake. Файл сборки Meson также может ссылаться на сервис WrapDB. [16]
- Сравнение вариантов использования разрешения зависимостей в разных системах сборки
вариант использования | Мезон | CMake | Груз |
---|---|---|---|
Поиск установленных зависимостей | pkg-config , пакеты CMake | Модуль CMake, pkg-config | ? |
Автоматическая загрузка зависимостей | подпроект | FetchContent [18] | Зависимость от груза |
Поиск установленных зависимостей с резервной загрузкой | pkg-config + подпроект | Модуль CMake/pkg-config + FetchContent | ? |
генератор файлов pkg-config | Да | Нет | Нет |
Облегчение использования в качестве автоматически загружаемой зависимости | Может использоваться как подпроект Meson. | Нет | С регистрацией в ящиках |
Кросс-компиляция
[ редактировать ]Кросс-компиляция требует дополнительной настройки, которую 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] и Меса [24] были портированы на Мезон.
Поддержка Meson Fortran и Cython была улучшена, чтобы помочь различным научным проектам перейти с setuptools для Meson, например SciPy . [25] Meson также можно использовать в качестве бэкэнда PEP517 для создания колес Python через мезон-питон . пакет [26]
Другие известные проекты, использующие Meson, включают QEMU и PostgreSQL ; на домашней странице Meson перечислены дальнейшие проекты, использующие Meson. [27]
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ «Выпуск 1.5.0» . 10 июля 2024 г. Проверено 23 июля 2024 г.
- ^ Перейти обратно: а б «Как сделать системы сборки не отстойными (видео linux.conf.au)» . Ютуб .
- ^ «Высокопроизводительная система сборки» .
Meson стремится оптимизировать производительность программистов, предоставляя простую, готовую к использованию поддержку современных инструментов и методов разработки программного обеспечения, таких как модульные тесты, отчеты о покрытии, Valgrind, CCache и тому подобное.
- ^ «mesonbuild/meson: Система сборки мезонов» . Гитхаб . Проверено 13 апреля 2016 г.
- ^ «Справочное руководство» .
- ^ «Идентификаторы компилятора» .
- ^ Перейти обратно: а б с д «Часто задаваемые вопросы по мезону» .
- ^ "мюон.сборка" . Проверено 27 января 2023 г.
- ^ Бейкер, Дилан (28 мая 2021 г.). "dcbaker/мезон-плюс-плюс" . Проверено 28 мая 2021 г.
- ^ «Мезонный синтаксис» .
- ^ «Команда CMake FILE» .
Примечание. Мы не рекомендуем использовать GLOB для сбора списка исходных файлов из вашего дерева исходного кода. Если файл CMakeLists.txt не изменяется при добавлении или удалении источника, созданная система сборки не может знать, когда просить CMake выполнить повторную генерацию.
- ^ «Нерекурсивный способ считать вредным» (PDF) . Майкрософт .
Рекурсивный Make считается вредным по очень веским причинам (Miller 1998); невозможно точно отслеживать зависимости, если система сборки состоит из отдельных компонентов, вызывающих друг друга.
- ^ «Make test не зависит от make all» . Трекер проблем с комплектным ПО . 23 июня 2016 г. Проверено 3 сентября 2020 г.
- ^ «Поддержка CMake для предварительно скомпилированных заголовков» . Проверено 13 марта 2018 г.
- ^ «Зависимости с пользовательской функцией поиска — документация Meson» .
- ^ Перейти обратно: а б «Руководство по системе зависимостей переноса» .
- ^ «Мезон и сторонние зависимости. Только один правильный путь» .
- ^ «FetchContent — Документация CMake 3.15.7» .
- ^ «Кросс-компиляция» .
- ^ Перейти обратно: а б «Цель GNOME: портировать модули для использования системы сборки Meson» .
- ^ «Дебют бета-версии GNOME 3.26: больше портирования мезонов, действие Wayland» .
- ^ «Отказаться от поддержки autotools» . Гитхаб .
- ^ «Поддержка Meson появилась на сервере X.Org» .
- ^ «Разработчики Mesa приближаются к отказу от системы сборки Autotools в пользу Meson» .
- ^ «Как построить SciPy с помощью Meson» .
- ^ «Пакет мезон-питон на PyPI» .
- ^ «Список проектов, использующих Meson» .