Разработчики) | Юсси Пакканен |
---|---|
Первый выпуск | 2 марта 2013 г . |
Стабильный выпуск | 0.57.0 / 14 февраля 2021 г . [1] |
Репозиторий | |
Написано в | Python |
Операционная система | Кроссплатформенность |
Тип | Инструменты разработки программного обеспечения |
Лицензия | Лицензия Apache 2.0 |
Веб-сайт | mesonbuild |
Мезонный ( / м ɛ . С ɒ п / ) [2] представляет собой программное средство для автоматизации здания (компиляция) программного обеспечения. Общая цель Meson - повысить продуктивность программистов. [3] Meson - это бесплатное программное обеспечение с открытым исходным кодом, написанное на Python под лицензией Apache License 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 ++ и другие компиляторы. В проекте используется ниндзя в качестве основной серверной системы сборки, но также могут использоваться серверные части Microsoft Visual Studio или Xcode .
Язык [ править ]
Синтаксис файлов описания сборки Meson (язык Meson) заимствован из Python , но не является Python: он спроектирован таким образом, что его можно переопределить на любом другом языке [6] - зависимость от Python является деталью реализации.
Язык Meson намеренно не является полным по Тьюрингу и поэтому не может выражать произвольную программу. [6] Вместо этого произвольные шаги сборки помимо компиляции поддерживаемых языков могут быть представлены как настраиваемые целевые объекты.
Язык Meson строго типизирован , поэтому встроенные типы, такие как библиотека, исполняемый файл, строка и их списки, не являются взаимозаменяемыми. [7] В частности, в отличие от Make, тип списка не разбивает строки по пробелам. [6] Таким образом, пробелы и другие символы в именах файлов и аргументах программы обрабатываются чисто.
Мезон | CMake | Делать | |
---|---|---|---|
Типы данных | да | Нет | Нет |
Тип данных списка | да | строка, разделенная точкой с запятой | строка, разделенная пробелами |
Тип данных словаря | с 0.47.0 | Нет | Нет |
Подбор файлов | Нет | да | да |
Возможность расширения с помощью пользовательских функций | Нет | да | да |
Может читать вывод произвольных команд (во время настройки) | Команда Run | да | да |
Может запускать произвольные команды во время сборки как рецепты настраиваемых целей | да | да | да |
Скорость и правильность [ править ]
Как и в случае с любой типичной системой сборки, правильные инкрементные сборки являются наиболее важной функцией скорости (потому что весь инкрементный прогресс отбрасывается, когда пользователь вынужден выполнять чистую сборку).
В отличие от чистого Make, отдельный шаг настройки гарантирует, что изменения аргументов, переменных среды и вывода команд не будут частично применены в последующих сборках, что может привести к устаревшей сборке.
Как и Ninja, Meson не поддерживает подстановку исходных файлов. [6] Требуя, чтобы все исходные файлы были перечислены в файлах определения сборки, временных меток файла определения сборки достаточно, чтобы определить, изменился ли набор исходных файлов, тем самым гарантируя обнаружение удаленных исходных файлов. CMake поддерживает подстановку, но не рекомендует ее по той же причине. [8]
Meson автоматически использует ccache, если он установлен. Он также обнаруживает изменения в символьные таблицы из разделяемых библиотек , чтобы пропустить перекомпоновки исполняемых файлов с библиотекой , когда нет ABI изменений. Предварительно скомпилированные заголовки поддерживаются, но требуют настройки. По умолчанию отладочные сборки не оптимизируются.
скоростная характеристика | Мезон | CMake | Делать |
---|---|---|---|
Запрещает устаревшие сборки (частичное перестроение против изменения ввода) | Да (если нет ошибок) | Если не подбирать исходные файлы | Рекурсивный Make (идиоматический паттерн) в этом отношении не работает [9] |
Цель, которая запускает тесты, зависит от создаваемых тестов (например, тест зависит от всех ) | да | Нет, и add_dependencies (тестировать все) запрещено, потому что тестовая цель зарезервирована. [10] | Тривиально добавить |
Ccache | Автоматический | Тривиально добавить | Тривиально добавить |
Distcc | Тривиально добавить | Тривиально добавить | Тривиально добавить |
Повторное связывание с учетом таблицы символов | да | Сделай сам | Сделай сам |
Предварительно скомпилированные заголовки | По желанию | CMake ≥ 3,16 [11] [2] | Сделай сам |
Особенности [ править ]
Заявленная цель Meson - способствовать современным методам разработки. Таким образом, Meson знает, как выполнять сборку единства , сборку с тестовым покрытием , оптимизацию времени компоновки и т. Д. Без необходимости писать поддержку для этого программисту.
Мезон | CMake | Автоинструменты | |
---|---|---|---|
Сгенерируйте configure скрипт | Нет | Нет | сделать расстояние |
Установите правильный каталог установки библиотеки в x86_64 Unix | Автоматический | Не стандартизован | ./configure --libdir=/usr/lib64 |
Подпроекты [ править ]
Meson не имеет эквивалента модулей CMake и в первую очередь полагается на pkg-config для поиска внешних по отношению к проекту зависимостей. Это не решение ада зависимостей , поскольку работа по удовлетворению отсутствующих зависимостей лежит на пользователе. В качестве альтернативы, зависимость может быть интернализована как подпроект - проект Meson внутри другого - либо содержащийся, либо как ссылка. [12] Это имеет недостаток, способствующий раздуванию программного обеспечения в случае общих зависимостей. Компромисс, который предпочитают упаковщики Linux, заключается в использовании подпроекта в качестве запасного варианта для внешней зависимости. [13]
Meson поддерживает подпроекты Meson и CMake. Файл сборки Meson также может относиться к службе WrapDB. [12]
- Сравнение вариантов использования разрешения зависимостей в разных системах сборки
вариант использования | Мезон | CMake | Груз |
---|---|---|---|
Поиск установленных зависимостей | pkg-config | Модуль CMake, pkg-config | ? |
Автоматическая загрузка зависимостей | подпроект | Внешний проект [14] | Зависимость от груза |
Поиск установленных зависимостей с резервной загрузкой | pkg-config + подпроект | Модуль CMake / pkg-config + ExternalProject | ? |
генератор файлов pkg-config | да | Нет | Нет |
Упрощение использования в качестве автоматически загружаемой зависимости | Может использоваться как подпроект Meson | Нет | При регистрации на crates.io |
- Заметки
- ^ Пакет CMake CMake может использовать либопакеты CMake,либо pkg-config, но, как показано в таблице, оба предназначены для поискаустановленныхзависимостей.
Кросс-компиляция [ править ]
Кросс-компиляция требует дополнительной настройки, которую Meson поддерживает в виде отдельного кросс-файла , который может быть внешним по отношению к проекту Meson. [15]
Усыновители [ править ]
GNOME поставил перед собой цель перенести свои проекты на Meson. [16] По состоянию на конец 2017 года GNOME Shell требует исключительно Meson после отказа от Autotools, [17] и центральные компоненты, такие как GTK + , Clutter-GTK , GLib и GStreamer, могут быть созданы с помощью Meson. [16]
Systemd полагается на Meson с момента отказа от Autotools в версии 234. [18]
Также на Meson были перенесены X.Org [19] и Mesa [20] .
На домашней странице Meson перечислены другие проекты, использующие Meson. [21]
См. Также [ править ]
- Список программного обеспечения для автоматизации сборки § Создание сценария сборки
Ссылки [ править ]
- ^ "Релизы - мезоностроение / мезон" . Проверено 14 февраля 2021 г. - через GitHub . CS1 maint: обескураженный параметр ( ссылка )
- ^ a b «Сделать системы сборки не отстойными (видео linux.conf.au)» .
- ^ "Система сборки высокой производительности" .
Meson стремится оптимизировать производительность программистов, предоставляя простую готовую поддержку современных инструментов и методов разработки программного обеспечения, таких как модульные тесты, отчеты о покрытии, Valgrind, CCache и т. Д.
- ^ «мезоностроение / мезон: система построения мезона» . GitHub . Проверено 13 апреля +2016 . CS1 maint: обескураженный параметр ( ссылка )
- ^ «Справочное руководство» .
- ^ a b c d "Часто задаваемые вопросы о Meson" .
- ^ "Синтаксис мезона" .
- ^ "Команда CMake FILE" .
Примечание. Мы не рекомендуем использовать GLOB для сбора списка исходных файлов из вашего исходного дерева.
Если файл CMakeLists.txt не изменяется при добавлении или удалении источника, сгенерированная система сборки не может знать, когда запросить CMake для регенерации.
- ^ «Нерекурсивные сделать считается вредным» (PDF) .
Рекурсивный Make считается вредным по очень веским причинам (Miller 1998);
невозможно точно отслеживать зависимости, когда система сборки состоит из отдельных компонентов, которые вызывают друг друга.
- ^ «Сделать тест не зависит от make all» . Система отслеживания проблем Kitware . 23 июня 2016 . Дата обращения 3 сентября 2020 . CS1 maint: обескураженный параметр ( ссылка )
- ^ «Поддержка CMake для предварительно скомпилированных заголовков» . Проверено 13 марта 2018 . CS1 maint: обескураженный параметр ( ссылка )
- ^ a b "Обернуть руководство по системе зависимостей" .
- ^ «Зависимости Meson и сторонних разработчиков. Только один правильный способ» .
- ^ https://cmake.org/cmake/help/v3.15/module/ExternalProject.html
- ^ "Кросс-компиляция" .
- ^ a b «Цель GNOME: портировать модули для использования системы сборки Meson» .
- ^ «Дебюты бета-версии GNOME 3.26: больше переноса мезонов, действие Wayland» .
- ^ "Отказаться от поддержки автоинструментов" .
- ^ «Поддержка Meson появилась на сервере X.Org» .
- ^ «Разработчики Mesa приближаются к отказу от системы сборки Autotools в пользу Meson» .
- ^ «Список проектов, использующих Meson» .
Внешние ссылки [ править ]
- Официальный веб-сайт