Автоматизация сборки
- 1 year ago
- 0
- 0
Meson ( МФА [ ˈ m i ː z ɒ n ]; с англ. — « мезон » ) — это кроссплатформенная консольная утилита , автоматизирующая процесс сборки программного обеспечения из исходного кода . Meson имеет открытый исходный код и распространяется под лицензией Apache . Основная идея Meson — совершать максимально быструю сборку и не затрачивать ни капли времени на отладку и тестирование , а так же на ожидание начала самого процесса компиляции . Утилита также имеет и более длинное, полное название — «The Meson build system» (Система сборки Мезон). Но, несмотря на то, что Meson официально позиционируется как система сборки, на самом деле таковой не является, так как в своей основе использует другую утилиту — систему сборки Ninja и ряд некоторых других утилит .
Первая версия Meson появилась в период рождественских праздников 2012 года и была разработана финским физиком - программистом Юсси Пакканеном. Разработчик был удручён тем, в каком состоянии прибывали на тот период времени системы автоматизации сборки. Многие не понравились ему тем, что работали слишком медленно, некоторые были слишком сложны в практическом применении, а другие имели слишком переусложнённый и неясный синтаксис . Не найдя желаемой системы сборки, Юсси решился потратить своё свободное время в эти праздничные выходные и создать свою собственную систему сборки, которая удовлетворяла бы его потребности .
Название утилиты подбиралось с учётом того, что оно не должно было совпадать с названием какого-либо пакета из базы пакетного менеджера системы Debian или с каким-либо проектом в базе SourceForge . Так как Юсси физик-программист, в какой-то момент он решил использовать в качестве названия имя элементарной частицы — Глюон (англ. Gluon, от слова glue — клей), подразумевая, что «глюоны — это элементарные частицы, которые удерживают протоны и нейтроны вместе, подобно тому, как задача системы сборки состоит в том, чтобы взять фрагменты исходного кода и компилятора, а затем связать их в единое целое». Но, увы, данное имя уже было занято, затем, перебрав несколько оставшихся субатомных частиц , он выяснил, что имя частицы мезон оказалось свободным .
Заявленной целью Meson является содействие современным методам разработки. Таким как использование метода « », сборки с покрытием кода тестами , LTO оптимизации ( ) и т. д. Без необходимости программиста писать для этого поддержку.
Будучи написанным на Python , Meson изначально работает в Unix-подобных операционных системах , включая macOS , а также Microsoft Windows и в ряде других операционных систем.
Meson поддерживает языки Си , C++ , CUDA , D , Objective-C , Фортран , Java , C# , Rust , Vala и имеет механизм обработки зависимостей, так называемый «Wrap» .
Meson поддерживает GNU Compiler Collection , Clang , Microsoft Visual C++ и другие компиляторы, включая нетрадиционные компиляторы, такие как Emscripten и Cython . При этом, Meson самостоятельно принимает решение о том, какой компилятор и с какими параметрами следует использовать. А кросс-компиляция проектов требует дополнительной конфигурации, которую Meson поддерживает в виде отдельного файла, который может быть внешним по отношению к проекту Meson .
Meson использует Ninja в качестве основной системы сборки, но также может использовать Microsoft Visual Studio или Xcode .
Meson может автоматически находить и использовать внешние зависимости с помощью pkg-config , CMake и поиска по конкретным проектам , но это позволяет находить только установленные зависимости, с которыми Meson ничего не может поделать. В качестве альтернативы или в качестве запасного варианта, зависимость может быть предоставлена в виде подпроекта — проекта Meson внутри другого, либо содержащегося в виде ссылки для внешней загрузки, возможно с патчами . Это позволяет Meson разрешить « ад зависимостей » ради удобства обыкновенных пользователей, которые хотят скомпилировать проект, но также может способствовать раздуванию ПО в размерах, если вместо этого можно было использовать общую установленную зависимость. Таким образом, предпочтительный режим использования пакетов Linux уходит на второй план.
Meson помимо собственной системы подпроектов, поддерживает и систему подпроектов CMake. Файл сборки Meson может также ссылаться на службу Wrap DB .
Meson изначально имеет встроенную поддержку Visual Studio и XCode, но для упрощения интеграции с самыми разными ИСР , было разработано специальное API решающие данную проблему. Для этого, каждый раз при запуске сборки Meson создаёт папку «meson-info» и помещает в ней информационные файлы формата JSON . С помощью данных файлов любая программа может получит подробную информацию о собираемых проектах .
Синтаксис файлов описания сборки Meson (язык Meson) заимствован от Python, но сам не является языком Python. Он был создан таким образом, что его можно повторно реализовать на любом другом языке . Например, Meson++ является реализацией на языке C++, зависимость от языка Python является лишь деталью реализации.
Язык Meson целенаправленно не является тьюринг-полным и следовательно не может выражать произвольную программу . Вместо этого произвольные этапы сборки, выходящие за рамки компиляции поддерживаемых языков, могут быть представлены в виде пользовательских целей .
Язык Meson строго типизирован, так что встроенные типы, такие как библиотека, исполняемый файл, строки и их списки, не являются взаимозаменяемыми . Переменные не имеют видимого типа, что также делает Meson динамически типизированным. В отличие от того же Make , тип списка не разделяет строки на пробелы .
Создадим « 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
Из списка программных проектов можно отметить наиболее значимые и влиятельные :