Опубликован релиз кроссплатформенного открытого генератора сценариев сборки CMake 3.27, выступающего в качестве альтернативы Autotools и используемого в таких проектах, как KDE, LLVM/Clang, MySQL, MariaDB, ReactOS и Blender. CMake примечателен предоставлением простого языка сценариев, средствами расширения функциональности через модули, поддержкой кэширования, наличием инструментов для кросс-компиляции, поддержкой генерации файлов сборки для широкого спектра систем сборки и компиляторов, наличием утилит ctest и cpack для определения сценариев тестирования и сборки пакетов, утилитой cmake-gui для интерактивной настройки параметров сборки. Код CMake написан на языке C++ и распространяется под лицензией BSD.
Основные улучшения:
- В утилиту cmake встроен интерактивный отладчик для языка сценариев, вызываемый при указании опции “–debugger”.
- Реализовано свойство “SKIP_LINTING”, позволяющее отключить проверку кода для определённых исходных файлов.
- Для генераторов добавлен флаг “COMPILE_ONLY”, при котором выполняется только компиляция без динамического связывания.
- В генераторы сборочных сценариев для Visual Studio 2015 и более новых версий в переменную CMAKE_GENERATOR_PLATFORM добавлена поддержка поля “version=” для выбора верcии Windows SDK.
- Для разделяемых библиотек, собираемых для платформы macOS, реализована возможность создания tbd-файлов (Text-Based Definition) с данными о библиотеке.
- Объявлены устаревшими и будут удалены в одном из следующих выпусков компоненты для обеспечения совместимости с версиям CMake старше 3.5.
- Удалён модуль FindCUDA, который был объявлен устаревшим в выпуске CMake 3.10. Проекты, завязанные на FindCUDA, рекомендовано перевести на встроенные в CMake средства для поддержки CUDA.
- Удалены модули FindPythonInterp и FindPythonLibs, объявленные устаревшими в выпуске CMake 3.12. Вместо них следует использовать модули FindPython3, FindPython2 или FindPython.
- При выполнении команды “cmake –build $dir –verbose” обеспечен вывод рабочего каталога и опций командной строки, используемых для сборки.
Дополнительно можно отметить выпуск сборочной системы Meson 1.2.0, которая используется для сборки таких проектов, как X.Org Server, Mesa, Lighttpd, systemd, GStreamer, Wayland, GNOME и GTK. Код Meson написан на языке Python и поставляется под лицензией Apache 2.0. Поддерживается кросс-компиляция и сборка в Linux, Illumos/Solaris, FreeBSD, NetBSD, DragonFly BSD, Haiku, macOS и Windows с использованием GCC, Clang, Visual Studio и других компиляторов. Возможна сборка проектов на различных языках программирования, включая C, C++, Fortran, Java и Rust. Вместо утилиты make при сборке по умолчанию применяется инструментарий Ninja, но возможно применение и других бэкендов, таких как xcode и VisualStudio.
В систему встроен многоплатформенный обработчик зависимостей, позволяющий использовать Meson для сборки пакетов для дистрибутивов. Правила сборки задаются на упрощённом предметно-ориентированном языке, отличаются хорошей читаемостью и понятны пользователю (по задумке авторов разработчик должен тратить минимум времени на написание правил). Поддерживается инкрементальный режим сборки, при котором пересобираются только компоненты, напрямую связанные с изменениями, внесёнными с момента прошлой сборки. Meson можно использовать для формирования повторяемых сборок, при которых запуск сборки в разных окружениях приводит к генерации полностью идентичных исполняемых файлов.
Основные новшества Meson 1.2:
- Добавлена поддержка инструментариев Metrowerks Embedded для архитектур PowerPC и ARM.
- Добавлен метод str.splitlines() для разделения строки на массив из строк.
- Добавлена поддержка вложенного вызова генераторов, например, “gen2.process(gen1.process(‘input.txt’))”.
- В блок declare_dependency реализована поддержка ключевого слова extra_files для добавления дополнительных файлов к сборочной цели.
- В команду “meson setup” добавлена опция ‘–genvslite’ для упрощения переключения между сборочными конфигурациями для среды Visual Studio.
- В gnome.generate_gir() добавлена поддержка аргумента env для установки переменных окружения.
- Расширены сохраняемые для инроспекции данные: в intro-compilers.json перечислены используемые компиляторы, в intro-machines.json добавлена информация о хостовой, сборочной и целевой системах, в intro-dependencies.json отражены сведения о внутренних зависимостях, в intro-targets.json указаны зависимости, vs_module_defs, win_subsystem и параметры компоновщика.
- В дополнение к свойству system добавлены свойства kernel и subsystem для более точной идентификации системы.
- Разрешено использование словарей для опций default_options и override_options (например, можно указывать “default_options : {‘key’: ‘value’}” вместо “default_options : [‘key=value’]”).
- Добавлены параметры rust.bindgen и bindgen_clang_arguments для передачи дополнительных аргументов компиляторам rustc и clang.
- Разрешено использование маски для выбора выполняемых тестов, например, для запуска тестов, начинающихся на слово basic, можно указать “meson test basic*”.