Loading AI tools
система автоматизации сборки Из Википедии, свободной энциклопедии
Meson (МФА [ˈmiːzɒn]; с англ. — «мезон» ) — это кроссплатформенная консольная утилита, автоматизирующая процесс сборки программного обеспечения из исходного кода. Meson имеет открытый исходный код и распространяется под лицензией Apache. Основная идея Meson — совершать максимально быструю сборку и не затрачивать ни капли времени на отладку и тестирование, а так же на ожидание начала самого процесса компиляции. Утилита также имеет и более длинное, полное название — «The Meson build system» (Система сборки Мезон). Но, несмотря на то, что Meson официально позиционируется как система сборки, на самом деле таковой не является, так как в своей основе использует другую утилиту — систему сборки Ninja и ряд некоторых других утилит[6][7].
Meson | |
---|---|
| |
Тип | система сборки[вд] |
Разработчик | Юсси Пакканен[вд][1] |
Написана на | Python[2] |
Операционные системы | Unix-подобная операционная система[3] и Windows |
Языки интерфейса | английский |
Первый выпуск | 2 марта 2012 |
Аппаратная платформа | кроссплатформенность[3] |
Последняя версия | |
Репозиторий | github.com/mesonbuild/me… |
Состояние | активное |
Лицензия | Apache License 2.0[5][1] |
Сайт | mesonbuild.com (англ.) |
Медиафайлы на Викискладе |
Первая версия Meson появилась в период рождественских праздников 2012 года и была разработана финским физиком-программистом Юсси Пакканеном. Разработчик был удручён тем, в каком состоянии пребывали на тот период времени системы автоматизации сборки. Многие не понравились ему тем, что работали слишком медленно, некоторые были слишком сложны в практическом применении, а другие имели слишком переусложнённый и неясный синтаксис. Не найдя желаемой системы сборки, Юсси решился потратить своё свободное время в эти праздничные выходные и создать свою собственную систему сборки, которая удовлетворяла бы его потребности[8][9].
Название утилиты подбиралось с учётом того, что оно не должно было совпадать с названием какого-либо пакета из базы пакетного менеджера системы Debian или с каким-либо проектом в базе SourceForge. Так как Юсси физик-программист, в какой-то момент он решил использовать в качестве названия имя элементарной частицы — Глюон (англ. Gluon, от слова glue — клей), подразумевая, что «глюоны — это элементарные частицы, которые удерживают протоны и нейтроны вместе, подобно тому, как задача системы сборки состоит в том, чтобы взять фрагменты исходного кода и компилятора, а затем связать их в единое целое». Но, увы, данное имя уже было занято, затем, перебрав несколько оставшихся субатомных частиц, он выяснил, что имя частицы мезон оказалось свободным[10].
Заявленной целью Meson является содействие современным методам разработки. Таким как использование метода «единой сборки[англ.]», сборки с покрытием кода тестами, LTO оптимизации (link time optimization) и т. д. Без необходимости программиста писать для этого поддержку.
Будучи написанным на Python, Meson изначально работает в Unix-подобных операционных системах, включая macOS, а также Microsoft Windows и в ряде других операционных систем.
Meson поддерживает языки Си, C++, CUDA, D, Objective-C, Фортран, Java, C#, Rust, Vala[11] и имеет механизм обработки зависимостей, так называемый «Wrap»[12].
Meson поддерживает GNU Compiler Collection, Clang, Microsoft Visual C++ и другие компиляторы, включая нетрадиционные компиляторы, такие как Emscripten и Cython[13][14]. При этом, Meson самостоятельно принимает решение о том, какой компилятор и с какими параметрами следует использовать. А кросс-компиляция проектов требует дополнительной конфигурации, которую Meson поддерживает в виде отдельного файла, который может быть внешним по отношению к проекту Meson[15].
Meson использует Ninja в качестве основной системы сборки, но также может использовать Microsoft Visual Studio или Xcode.
Meson может автоматически находить и использовать внешние зависимости с помощью pkg-config, CMake и поиска по конкретным проектам[16], но это позволяет находить только установленные зависимости, с которыми Meson ничего не может поделать. В качестве альтернативы или в качестве запасного варианта, зависимость может быть предоставлена в виде подпроекта — проекта Meson внутри другого, либо содержащегося в виде ссылки для внешней загрузки, возможно с патчами[12]. Это позволяет Meson разрешить «ад зависимостей» ради удобства обыкновенных пользователей, которые хотят скомпилировать проект, но также может способствовать раздуванию ПО в размерах, если вместо этого можно было использовать общую установленную зависимость. Таким образом, предпочтительный режим использования пакетов Linux уходит на второй план.
Meson помимо собственной системы подпроектов, поддерживает и систему подпроектов CMake. Файл сборки Meson может также ссылаться на службу Wrap DB[17].
Meson изначально имеет встроенную поддержку Visual Studio и XCode, но для упрощения интеграции с самыми разными ИСР, было разработано специальное API решающие данную проблему. Для этого, каждый раз при запуске сборки Meson создаёт папку «meson-info» и помещает в ней информационные файлы формата JSON. С помощью данных файлов любая программа может получит подробную информацию о собираемых проектах[18].
Синтаксис файлов описания сборки Meson (язык Meson) заимствован от Python, но сам не является языком Python. Он был создан таким образом, что его можно повторно реализовать на любом другом языке[19][20]. Например, Meson++[21] является реализацией на языке C++, зависимость от языка Python является лишь деталью реализации.
Язык Meson целенаправленно не является тьюринг-полным и следовательно не может выражать произвольную программу[22]. Вместо этого произвольные этапы сборки, выходящие за рамки компиляции поддерживаемых языков, могут быть представлены в виде пользовательских целей[23].
Язык Meson строго типизирован, так что встроенные типы, такие как библиотека, исполняемый файл, строки и их списки, не являются взаимозаменяемыми[24]. Переменные не имеют видимого типа, что также делает Meson динамически типизированным. В отличие от того же Make, тип списка не разделяет строки на пробелы[25].
Создадим «Hello, World!» проект на языке Си, файл будет называться «main.c».
#include <stdio.h>
int main()
{
puts("Hello, World!");
return 0;
}
Далее рядом с ним создаём файл — «meson.build».
project('tutorial', 'c') # tutorial — имя проекта,
# c — язык программирования
executable('demo', 'main.c') # demo — имя исполняемого файла,
# «main.c» — файл исходного кода
Для начала инициализируем проект.
$ meson setup builddir
Появится каталог «builddir», перейдём в него и соберём наш проект.
$ cd builddir
$ meson compile
Исполняемый файл готов, осталось лишь запустить.
$ ./demo
Из списка программных проектов можно отметить наиболее значимые и влиятельные[26]:
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.