Meson (система сборки)
Материал из Википедии — свободной энциклопедии
Meson | |||
---|---|---|---|
![]() | |||
![]() Процесс сборки dav1d (кодек-декодер из проекта VideoLAN) с помощью Meson | |||
Тип | система сборки[вд] | ||
Разработчик | Юсси Пакканен[вд][2] | ||
Написана на | Python[3] | ||
Операционные системы | Unix-подобная операционная система[4] и Windows | ||
Языки интерфейса | английский | ||
Первый выпуск | 2 марта 2012 | ||
Аппаратная платформа | кроссплатформенность[4] | ||
Последняя версия | |||
Репозиторий | github.com/mesonbuild/me… | ||
| |||
| |||
Состояние | активное | ||
Лицензия | Apache License 2.0[5][2] | ||
Сайт | mesonbuild.com (англ.) | ||
![]() |
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]:
См. также
[править | править код]Примечания
[править | править код]- ↑ Release 1.5.1 — 2024.
- ↑ 1 2 The Meson Build system: Legal information (англ.)
- ↑ Meson build system on Open Hub: Languages Page (англ.)
- ↑ 1 2 The Meson Build system (англ.)
- ↑ GitHub: COPYING (англ.)
- ↑ Выпуск сборочной системы Meson 0.58. Проект по созданию реализации Meson на языке Си . OpenNET (2 мая 2021). Дата обращения: 22 января 2022. Архивировано 23 января 2022 года.
- ↑ Meson manual: Running Meson — Building from the source. Building directory with ninja (англ.). mesonbuild.com. Дата обращения: 22 января 2022. Архивировано 23 января 2022 года.
- ↑ Tim Schürmann. Meson — новая система сборки программного обеспечения . rus-linux.net (18 апреля 2017). Дата обращения: 22 января 2022. Архивировано 23 января 2022 года.
- ↑ Tim Schürmann. Meson — a new build system (англ.). Linux Magazine (1 сентября 2014). Дата обращения: 22 января 2022. Архивировано 23 января 2022 года.
- ↑ Why is it called Meson? (англ.). mesonbuild.com. Дата обращения: 22 января 2022. Архивировано 23 января 2022 года.
- ↑ The Meson Build System: Functions — project() (англ.). mesonbuild.com. Дата обращения: 22 января 2022. Архивировано 10 февраля 2022 года.
- ↑ 1 2 The Meson Build System: Wrap dependency system manual (англ.). mesonbuild.com. Дата обращения: 22 января 2022. Архивировано 23 января 2022 года.
- ↑ The Meson Build System: Compiler ids (англ.). mesonbuild.com. Дата обращения: 22 января 2022. Архивировано 21 февраля 2022 года.
- ↑ Jussi Pakkanen. How compilation works (англ.) (PDF). meson-manual.com (2020). Дата обращения: 22 января 2022. Архивировано 23 января 2022 года.
- ↑ The Meson Build System: Cross compilation (англ.). mesonbuild.com. Дата обращения: 22 января 2022. Архивировано 23 января 2022 года.
- ↑ The Meson Build System: Dependencies — Dependencies with custom lookup functionality (англ.). mesonbuild.com. Дата обращения: 22 января 2022. Архивировано 21 февраля 2022 года.
- ↑ The Meson Build System: Meson WrapDB packages (англ.). mesonbuild.com. Дата обращения: 22 января 2022. Архивировано 23 января 2022 года.
- ↑ The Meson Build System: Manual — IDE integration (англ.). mesonbuild.com. Дата обращения: 22 января 2022. Архивировано 23 января 2022 года.
- ↑ The Meson Build System: FAQ — Why is Meson implemented in Python (rather than programming language X)? (англ.). mesonbuild.com. Дата обращения: 22 января 2022. Архивировано 23 января 2022 года.
- ↑ The Meson Build System: FAQ — But I really want a version of Meson that doesn't use python! (англ.). mesonbuild.com. Дата обращения: 22 января 2022. Архивировано 23 января 2022 года.
- ↑ Meson++ (англ.). GitHub. Дата обращения: 22 января 2022. Архивировано 6 января 2022 года.
- ↑ The Meson Build System: FAQ — Why is Meson not just a Python module so I could code my build setup in Python? (англ.). mesonbuild.com. Дата обращения: 22 января 2022. Архивировано 23 января 2022 года.
- ↑ The Meson Build System: FAQ — I have proprietary compiler toolchain X that does not work with Meson, how can I make it work? (англ.). mesonbuild.com. Дата обращения: 22 января 2022. Архивировано 23 января 2022 года.
- ↑ The Meson Build System: Syntax (англ.). mesonbuild.com. Дата обращения: 22 января 2022. Архивировано 23 января 2022 года.
- ↑ The Meson Build System: FAQ — Why is there not a Make backend? (англ.). mesonbuild.com. Дата обращения: 22 января 2022. Архивировано 23 января 2022 года.
- ↑ The Meson Build System: Additional documentation — List of projects using Meson (англ.). mesonbuild.com. Дата обращения: 22 января 2022. Архивировано 23 января 2022 года.
Ссылки
[править | править код]- Официальный сайт (англ.)
- Руководство (англ.)
- Репозиторий проекта (англ.)
- Часто задаваемые вопросы (англ.)
- Список проектов использующих Meson (англ.)
Text is available under the CC BY-SA 4.0 license; additional terms may apply.
Images, videos and audio are available under their respective licenses.