The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Доступны системы сборки CMake 3.27.0 и Meson 1.2

23.07.2023 09:38

Опубликован релиз кроссплатформенного открытого генератора сценариев сборки 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*".


  1. Главная ссылка к новости (https://www.kitware.com/cmake-...)
  2. OpenNews: Выпуск сборочной системы Meson 1.1
  3. OpenNews: Выпуск системы сборки GNU Make 4.4
  4. OpenNews: Сбои в системах сборки из-за изменения контрольных сумм архивов в GitHub
  5. OpenNews: Facebook опубликовал систему сборки Buck2
  6. OpenNews: Релиз системы сборки CMake 3.23
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/59481-cmake
Ключевые слова: cmake, meson, build
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (40) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Аноним (1), 10:08, 23/07/2023 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Какие достоинства и недостатки у этой пары?
     
     
  • 2.2, Аноним (2), 10:26, 23/07/2023 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Начнем с того, что это взаимоисключающие инструменты.
     
     
  • 3.4, llolik (ok), 10:50, 23/07/2023 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Не совсем. Как минимум у Meson есть модуль-транслятор CMake ( https://mesonbuild.com/CMake-module.html ), который позволяет выполнять сборку CMake подпроектов прямо из Meson (в идеале, даже не меняя ничего в исходном скрипте CMake-а) и разрешать зависимости с помощью cmake-а.
     
  • 2.3, Аноним (3), 10:40, 23/07/2023 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Первое -- перегруженное легаси с нарушениями совместимости из-за чего сборочные скрипты постоянно отваливаются и пойди разберись из-за чего, сомнительным синтаксисом и документацией, вызывающей определённые вопросы. Второе впихнёт в тебя весь гномовский кал и простым исправлением сборочного скрипта, как с autotools, тут не обойдёшься, но лучше ничего не придумали.
     
     
  • 3.9, anon223516234 (?), 11:39, 23/07/2023 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Понимаю твои страдания, связанные с несовместимостью и сложностью синтаксиса в cmake. Однако, мне довольно сложно сопереживать твоему опыту, так как мои собственные взаимодействия с этим инструментом не вызывали таких проблем. Возможно, это связано с разными подходами к использованию cmake или различиями в наших проектах. Несмотря на все трудности, всё-таки cmake остаётся одним из самых мощных и гибких инструментов для сборки проектов.
     
     
  • 4.14, Аноним (3), 12:35, 23/07/2023 [^] [^^] [^^^] [ответить]  
  • +/
    Сколько у тебя того опыта? В этом всё дело. Через несколько лет забвения сборочные скрипты тупо разваливаются.
     
     
  • 5.16, anon223516234 (?), 13:06, 23/07/2023 [^] [^^] [^^^] [ответить]  
  • +/
    как и все остальное в it.
    либо адаптируется, либо отправляется в архив - третьего не дано
     
     
  • 6.38, Аноним (38), 14:50, 24/07/2023 [^] [^^] [^^^] [ответить]  
  • +/
    Скоро будет 5 лет проекту на Meson кодовая база ~100_000 строк,
    но только патчи и правки. В остальном не трогает никто.
     
  • 5.17, Rezzet (??), 13:27, 23/07/2023 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Через несколько лет почти любой код разваливается, если его не трогать, библиотеки обновляются, интерфейсы меняются, код перестает собираться. Мы в шутку называем это периодом полураспада кода. Cmake редкостная дрянь, но ничего лучше на данный момент нету. Autotool может быть и хорош для сборки, но сборка это одна из из функций которые нужны. Система сборки это инструмент разработчика. Идея о том что пользователи будут устанавливать пакеты из исходников - это утопия. Смысла она особого не несет. А вот проблемы разработчиков Cmake решает гораздо лучше Autotool. Как минимум тем что есть интеграция в среды разработки. Интеграция в пакетные менеджеры: vcpkg и прочие. Жизнь с++ разработчика с приходом Cmake стала значительно лучше. И де факто это сейчас является стандартом.
     
     
  • 6.19, Аноним (3), 13:45, 23/07/2023 [^] [^^] [^^^] [ответить]  
  • +/
    В том и дело, autoreconf прогоняешь и всё собирается дальше на новой версии, как и собиралось. Есть куча проектов, десятилетиями не менявших сборочные скрипты, и у них по-прежнему всё в порядке при сборке в современных системах. Что касается зависимостей, то тот же pkg-config дохнет куда реже сомнительных скриптов. Если совместимость в библиотеке есть, то она никуда не денется, а на нет и суда нет. Но это другой уровень забот и cmake просто справляется с этим хуже.
     
     
  • 7.22, Аноним (-), 17:53, 23/07/2023 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > В том и дело, autoreconf прогоняешь и всё собирается дальше на новой версии, как и собиралось.

    В этом месте автотулс педальный и правда всех делает с отрывом. Что-что а пересобрать новую программу на олдовой системе, или олдовую программу на свежей системе - обычно прокатывает.

    С cmake это будет 50/50. А с мезоном - как обычно с всей питонятиной, через пару лет оно вообще уже не совместимо с собой. А система конфигурации/сборки это оно. И не должно становиться источником проблем хуже чем собираемый, блин, код и требовать постоянного внимания. Потому что тогда получается что хвост виляет собакой.

     
  • 7.39, Rezzet (??), 02:20, 25/07/2023 [^] [^^] [^^^] [ответить]  
  • +/
    Вы по прежнему не поняли смысл. Взять и собрать приложение это одна задача. СОВСЕМ другая задача это разрабатывать приложение, именно обеспечивать сборку для процесса разработки. CMake это не система сборки. Это генератор проектов, это система описания проекта для разработчика, не для конечного потребителя. В процессе разработки возникает все время вопрос как сделать так что бы с твоей пачкой исходников люди могли работать на разных системах и в разных IDE для разработки. Именно разработчики, пользователи в этой схеме вообще отсутствуют. К ним прилетит готовый бинарь. Собирать приложение из исходников надо 3-ем красноглазым з@дротом на планете. Для установки и менеджмента приложений давно придумали пакетные менеджеры. А разрабатывать приложение нужно армии программистов, которые порой работают не только с c++. Cmake это не система сборки, это генератор проектов, или система описания проекта. Даже автор новости не понимает зачем и что нужно. Именно поэтому Cmake будет жить и развиваться. А аутотул сдохнет как система сама в себе которая непонятно зачем существует.
     
     
  • 8.41, Аноним (3), 08:05, 25/07/2023 [^] [^^] [^^^] [ответить]  
  • +/
    Не выдумывай, я говорил именно про разработку Но сборка это часть процесса разр... текст свёрнут, показать
     
  • 6.28, Аноньимъ (ok), 21:04, 23/07/2023 [^] [^^] [^^^] [ответить]  
  • –5 +/
    >Жизнь с++ разработчика с приходом Cmake стала значительно лучше.

    А насколько бы она стала лучше с уходом С++...

    Не перестаю поражаться тому хроническому ужасу из соплей костылей и палок который терроризирует мир айти по вине сишников.

    Это же нужно было так фундаментально испортить всё вообще.

     
     
  • 7.29, Аноним (29), 21:33, 23/07/2023 [^] [^^] [^^^] [ответить]  
  • +/
    > Не перестаю поражаться тому хроническому ужасу из соплей костылей и палок который терроризирует мир айти

    Справедливости ради, это существует в основном в коммерческой разработке.
    Когда на пятки наступают конкуренты, то либо работаешь с тем, что есть, либо твой бизнес вымирает от траты временни и денег на улучшения, которые не принесли конкурентных преимуществ.

     
     
  • 8.30, Аноньимъ (ok), 22:03, 23/07/2023 [^] [^^] [^^^] [ответить]  
  • –1 +/
    С C сильно усложняет разработку, делая её не просто дорогой но и недоступной д... текст свёрнут, показать
     
  • 3.13, Аноним (29), 12:07, 23/07/2023 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > autotools
    > лучше ничего не придумали.

    Только вот оно прибито гвоздями к unix-окружению. А сабжы пытаются быть кросс-платформенными.

     
     
  • 4.23, Аноним (-), 17:55, 23/07/2023 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Только вот оно прибито гвоздями к unix-окружению. А сабжы пытаются быть кросс-платформенными.

    Только это окружение можно и в винде вкатить. И если на то пошло автотулс работает в большем числе всяких странных окружений чем вон те вместе взятые. Уж мезон вообще настолько "кроссовый" что кроме винды линя и мака на целых полутора архитектурах - по сути ничего и не умеет. И уж не ему про кроссовость вещать.

     
     
  • 5.27, Аноним (29), 20:02, 23/07/2023 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Только это окружение можно и в винде вкатить.

    А поддержку MSVC в автотулз тоже вкатишь?

     
  • 2.5, Аноним (5), 11:09, 23/07/2023 [^] [^^] [^^^] [ответить]  
  • +/
    > Какие достоинства и недостатки у этой пары?

    обычные болгеносы - в ядре Linux по прежнему make

     
     
  • 3.8, Аноним (8), 11:36, 23/07/2023 [^] [^^] [^^^] [ответить]  
  • +/
    Что не является преимуществом ни ядра, ни мейка.
     
     
  • 4.12, Аноним (5), 11:59, 23/07/2023 [^] [^^] [^^^] [ответить]  
  • +/
    > Что не является преимуществом ни ядра, ни мейка.

    Linux использует 100% населения земли поэтому он нужен как воздух а с ним и make, а кому нужен cmake и meson кроме пары широкоизвестных в узких кругах проектов? "лучше гор могут быть только горы"

     
     
  • 5.18, Rezzet (??), 13:34, 23/07/2023 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Не понимаешь смысла и назначения Cmake и Make. Cmake это в первую очередь инструмент разработчика. Как Autolool решит проблему работы в Visual Studio, XCode, Clion и QtCretor под Win, Mac, Linux одновременно команды разработчиков? А это реальность в которой живу уже который проект подряд.
     
     
  • 6.20, Аноним (5), 14:26, 23/07/2023 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Как Autolool решит проблему работы в Visual Studio, XCode, Clion и QtCretor под Win, Mac, Linux одновременно команды разработчиков?

    для сборки Linux не нужен Autotool - как же работают над ним одновременно сотни тысяч разработчиков по всему миру?

     
     
  • 7.33, llolik (ok), 10:50, 24/07/2023 [^] [^^] [^^^] [ответить]  
  • +/
    > для сборки Linux не нужен Autotool

    Потому что у них есть собственный Kconfig/Kbuild.

     
     
  • 8.34, Аноним (34), 11:26, 24/07/2023 [^] [^^] [^^^] [ответить]  
  • +/
    он конфигурирует само ядро а не собирает информацию о системном окружении - ядро... текст свёрнут, показать
     
     
  • 9.35, llolik (ok), 11:50, 24/07/2023 [^] [^^] [^^^] [ответить]  
  • +/
    Так и autotools cmake meson нужны для того, чтобы конфигурировать сборку проекта... текст свёрнут, показать
     
     
  • 10.36, Аноним (34), 11:56, 24/07/2023 [^] [^^] [^^^] [ответить]  
  • +/
    для болгеносов Если проект самодостаточный - нет, поэтому достаточно обычного m... текст свёрнут, показать
     
  • 5.24, Аноним (-), 17:55, 23/07/2023 Скрыто ботом-модератором     [к модератору]
  • +/
     
  • 4.15, llolik (ok), 12:48, 23/07/2023 [^] [^^] [^^^] [ответить]  
  • +/
    А никого не смущает, что это замены autotools, а не make-а?
    Cmake умеет работать и с make-ом напрямую. Meson исходит из того, что проще простую, как валенок, ninja (вот это, как раз, альтернатива make) собрать под нужную платформу, чем писать отдельный генератор ещё и под make https://mesonbuild.com/FAQ.html#why-is-there-not-a-make-backend
     
  • 2.26, archer73 (?), 19:23, 23/07/2023 [^] [^^] [^^^] [ответить]  
  • +/
    meson проще, быстрее, неплохо документирован для начала работы. По факту, не является системой сборки. На деле высокоуровневый конфигуратор для системы сборки ninja. Позволяет очень быстро подготовить сборку своего проекта, но трудно кастомизируется, если нужно что-то нетривиальное. ИМХО наркоманское исполнение subproject. Для линковки необходимых библиотек иногда нужно долго подбирать их название, удовлетворяющее meson. Используется проектом mesa3d.
    Сmake сложен для освоения, многословен, ужасная документация, однако содержит кучу возможностей для кастомизации сборки под свои потребности. По факту, сейчас является самой распространенной системой сборки (даже учебники по нему видел).
     

  • 1.6, Аноним (6), 11:24, 23/07/2023 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Корпораты по своим личным гендерным причинам нее переносят autotools. Ядро Линукс как-то собирается и ничего. А у этих не получается, практически со студенческой скамьи начинают сборочные системы строгать.
     
     
  • 2.7, Аноним (29), 11:32, 23/07/2023 [^] [^^] [^^^] [ответить]  
  • +/
    Кто о чем, а вшивый о бане...
     
  • 2.11, Аноним (2), 11:55, 23/07/2023 [^] [^^] [^^^] [ответить]  
  • +1 +/
    В ядре Linux autotools не используется. Вообще, autotools - это груда костылей на никому не известных язычках вроде M4 кишками наружу - у авторов не было никакого понятия об инкапсуляции. Сравнивать его "архитектуру" можно только с CVS.
     
     
  • 3.31, Вы забыли заполнить поле Name (?), 22:16, 23/07/2023 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > на никому не известных язычках вроде M4

    m4 is a general-purpose macro processor included in most Unix-like operating systems, and is a component of the POSIX standard. First appeared 1977; 46 years ago

    CMake точно также можно называть костылем. Особенно учитывая такое явление, как modern cmake.

     
  • 3.32, ыы (?), 08:04, 24/07/2023 [^] [^^] [^^^] [ответить]  
  • +2 +/
    >не известных язычках вроде M4

    это прородитель всего сущего... RTFM LMD!

     
     
  • 4.42, TydymBydym (ok), 22:38, 30/07/2023 [^] [^^] [^^^] [ответить]  
  • +/
    Да нахрен такие прородители? Я помню что даже sendmail.cf предпочитал руками писать (да-да, все эти правила чтобы почту от спамеров и прочих кулхацкеров фильтровать), лишь бы с этой хтонью не связываться.
     

  • 1.21, Аноним (21), 17:08, 23/07/2023 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Кто знает, поддерживает ли Cmake модули в C++?
     
     
  • 2.25, archer73 (?), 19:07, 23/07/2023 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Точно поддерживает модули Fortran. Модули C++ вроде пока работают в экспериментальном режиме.
    https://github.com/Kitware/CMake/blob/master/Help/dev/experimental.rst#c20-mod
     

  • 1.40, DungeonLords (ok), 07:59, 25/07/2023 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Спасибо большое за новость! Сам использую и то и то. Недавно читал новую статью про настройки CMake https://habr.com/p/741868/
     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру