cmkr: декларативная генерация CMake для более чистых сборок C++
Испытайте декларативный процесс сборки, написав один cmake.toml для создания стандартных проектов CMake, включая цели и зависимостиwords). Дункан Огилви создал cmkr как утилиту для обертки CMake с манифестом TOML, похожим на Cargo, сохраняя совместимость с CMake и уменьшая объем шаблонного кодаwords). Ключевые возможности включают конфигурацию TOML, автоматическую генерацию CMakeLists.txt, интеграцию FetchContent и vcpkg, а также самозагрузку для CI; разработчики, которые хотят меньше ручного скриптинга CMake, получают наибольшую выгодуwords).
Что делает cmkr на практике?
cmkr читает файл cmake.toml, понятный человеку, и автоматически генерирует идиоматические файлы CMakeLists.txt. Инструмент принимает метаданные проекта, определения нескольких целей (исполняемые файлы, статические и динамические библиотеки), условную логику и параметры, специфичные для платформы, в формате TOML, а затем выдает стандартный CMake, который может использовать любой IDE или этап сборки, осведомленный о CMake. Это заменяет ручные скрипты CMake единственным декларативным манифестом для каждого проекта.
Как он ведет себя в CI и совместных проектах?
cmkr предлагает самозагрузку, так что репозиторий может включать сгенерированные файлы и скрипт загрузки, который позволяет последующим сборщикам работать только с стандартным CMake и компилятором C++. Этот дизайн означает, что CI-пайплайны не нуждаются в предварительной установке cmkr; сгенерированный CMake остается каноническим входом для автоматизированных сборок, что делает совместное использование проектов и интеграцию с существующими рабочими процессами CI простыми.
Безопасен ли cmkr и насколько крутой кривой обучения?
Инструмент сохраняет совместимость с CMake, производя стандартные CMakeLists.txt, поэтому он не заменяет CMake во время сборки. Условная логика и правила, специфичные для платформы, находятся в формате TOML, что требует изучения сопоставления cmkr от декларативных записей к конструкциям CMake. Фоновая подготовка разработчика в инструментах C++ и предыдущий опыт работы с CMake сократят время на обучение; новички получают выгоду от менее многословной конфигурации, но должны изучить схему манифеста.
Ясный выбор для команд C++, которые хотят декларативные метаданные сборки
cmkr подходит разработчикам, которые предпочитают писать единственный манифест TOML вместо поддержания нескольких скриптов CMake; он сохраняет совместимость проектов с существующими инструментами и IDE CMake, одновременно позволяя осуществлять начальную настройку репозитория. Основной компромисс заключается в дополнительном уровне абстракции: командам необходимо сопоставить концепции CMake с декларативной схемой, что добавляет начальный этап обучения, прежде чем появятся временные преимущества.