Ключевой целью развития Meson является обеспечение высокой скорости сборочного процесса в сочетании с удобством и простотой использования. Вместо утилиты make при сборке по умолчанию применяется инструментарий Ninja, но возможно применение и других бэкендов, таких как xcode и VisualStudio. В систему встроен многоплатформенный обработчик зависимостей, позволяющий использовать Meson для сборки пакетов для дистрибутивов. Правила сборки задаются на упрощённом предметно-ориентированном языке, отличаются хорошей читаемостью и понятны пользователю (по задумке авторов разработчик должен тратить минимум времени на написание правил).
Поддерживается кросс-компиляция и сборка в Linux, Illumos/Solaris, FreeBSD, NetBSD, DragonFly BSD, Haiku, macOS и Windows с использованием GCC, Clang, Visual Studio и других компиляторов. Возможна сборка проектов на различных языках программирования, включая C, C++, Fortran, Java и Rust. Поддерживается инкрементальный режим сборки, при котором пересобираются только компоненты, напрямую связанные с изменениями, внесёнными с момента прошлой сборки. Meson можно использовать для формирования повторяемых сборок, при которых запуск сборки в разных окружениях приводит к генерации полностью идентичных исполняемых файлов.
Основные новшества Meson 1.6:
- Добавлена команда «meson reprotest» для тестирования повторяемых сборок.
- Добавлена поддержка компилятора flang, развиваемого проектом LLVM.
- Добавлена поддержка SDK DIA (Debug Interface Access), позволяющего читать отладочную информацию в формате PDB, используемом на платформе Windows.
- В компиляторах nvc и nvc++ от компании NVIDIA обеспечена возможность выбора стандартов Си и Си++. В nvc: c89, c90, c99, c11, c17, c18, gnu90, gnu89, gnu99, gnu11, gnu17, gnu18. В nvc++: c++98, c++03, c++11, c++14, c++17, c++20, c++23, gnu++98, gnu++03, gnu++11, gnu++14, gnu++17, gnu++20.
- Предоставлена возможность определения наличия специфичных для Qt утилит (moc, uic, rcc и lrelease) через вызов функции has_tools() для импортированных модулей сборки Qt.
- Реализована возможность использования компилятора OpenXL на платформе AIX (помимо ранее поддерживаемого GCC).
- По умолчанию включён вывод предупреждений о всех устаревших возможностях, если в функции project() для собираемого проекта не указана минимальная версия Meson.
- Добавлена поддержка использования переменных в системных зависимостях (в методе get_variable()).
- Добавлено предупреждение об экспериментальном характере поддержки субпроектов Cargo.
- В зависимостях, полученных из субпроектов CMake, теперь разрешено использование только флагов компоновки, помеченных в CMake как PUBLIC или INTERFACE (флаги помеченные как PRIVATE применяются только при сборке библиотеки субпроекта, а не при использовании в роли зависимости).
- Добавлена опция default_both_libraries, позволяющая переопределить поведение по умолчанию сборочной цели both_libraries.
- Для внутренних зависимостей, возвращаемых функцией declare_dependency(), реализованы методы as_static и as_shared для преобразования списка зависимостей с учётом статического или динамического связывания.
- В функциях test() и benchmark() добавлена возможность определения того, что проверяемый исполняемый файл является обёрткой для вызова других программ. Например:
test('some_test', find_program('sudo'), args : [ find_program('sh'), 'script.sh' ])
- Добавлена поддержка использования вместо Clang фронтэнда компилятора C/C++, предоставляемого в инструментарии к языку Zig 0.11.
Источник: http://www.opennet.ru/opennews/art.shtml?num=62081