Meson (система сборки)
Meson (МФА [ˈmiːzɒn]; с англ. — «мезон» ) — это кроссплатформенная консольная утилита, автоматизирующая процесс сборки программного обеспечения из исходного кода. Meson имеет открытый исходный код и распространяется под лицензией Apache. Основная идея Meson — совершать максимально быструю сборку и не затрачивать ни капли времени на отладку и тестирование, а так же на ожидание начала самого процесса компиляции. Утилита также имеет и более длинное, полное название — «The Meson build system» (Система сборки Мезон). Но, несмотря на то, что Meson официально позиционируется как система сборки, на самом деле таковой не является, так как в своей основе использует другую утилиту — систему сборки Ninja и ряд некоторых других утилит[6][7]. ИсторияСозданиеПервая версия 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
Программные проекты использующие MesonИз списка программных проектов можно отметить наиболее значимые и влиятельные[26]: См. такжеПримечания
Ссылки
|