Вышел-таки релиз смака 4.0!
Авторы решились поднять мажор, чтобы подсветить изменения в обратной совместимости и аккуратно выпилить старьё времён версии 2.8.ххх, старее, и вверх до версии 3.5 - старые политики, некоторые кривые вещи, устаревшие ещё с начала 10-х годов, хотя, по изменениям релиз минорный (до февраля это был ещё релиз 3.32, жалко, что красивой цифры 3.33 мы так и не увидели).
Для поддержки сборки проектов, которые собирались на последних версиях (3.31, 3.30 и некоторых раньше) добавили переменную окружения для мейнтейнеров старья
CMAKE_MINIMUM_POLICY_VERSION, и ей надо задать версию 3.5, чтобы старые проекты не ругались на старые политики сборки, которые были удалены. Авторы смака вместе с мейнтейнерами некоторых дистров (дебиан, Федора) помогли починить кое-где сборку.
Если у вас проект, у которого стоит cmake_minimum_required(VERSION 3.4) и ниже - пора обновиться, желательно на 3.10. (у проектов, у которых нет этой команды вверху, лучше добавить эту команду, чтобы правильно применять политики обратной совместимости).
Помимо этого, там:
- в рамках тикета нашли багу в LLVM, в его
поддержке модулей c++20 для clang/libc++ (Там глава Kitware
зачинил багу);
- Продолжают внедрять и стабилизировать
CPS - декларативный формат для внешних зависимостей, которые потом будут цепляться через find_package(libmeow COMPONENTS paws)
- Улучшают
инструментацию сборки/конфигурирования проекта (активности примерно начались с версии 3.18, когда добавили простую возможность профилирования этапа конфигурации проекта), теперь можно будет получить более детальную информацию о том, что именно подтормаживает при процессе конфигурации/сборки проектов. Формат данных -
flame-graph, включить в своем проекте можно
через флаги --profiling-output= --profiling-format=google-trace, например: cmake -S . -B build --profiling-output=configure-profile.json --profiling-format=google-trace. Полученный JSON можно скормить служебной странице хромиумоподобных браузеров about:profiling, в случае с Firefox - на
profiler.firefox.com. Также такие файлы понимают некоторые IDE, типа Qt Creator, vscode и пр.
В четвертой версии эту вещь расширили (на сборку, линковку, кастом-шаги),
написали документацию, и сделали возможность задавать свои хуки на измерения, общаться через
CMake File API (используется IDE-шками для сбора ВСЕЙ метаинфы о проекте, о таргетах, исходниках и пр.). Новая фича спрятана под волшебным идентификатором CMAKE_EXPERIMENTAL_INSTRUMENTATION. Такие идентификаторы описаны
тут (там и про CPS, и про find_package() с CPS, и про import std, который все ещё не достаточно стабильный, и авторы CMake ходят фиксят/репортят баги в апстримах). Эта тема будет интересна для авторов IDE, для девопсов и тех, кому хочется найти узкие места сборки как локально, так и на CI/CD, и я, возможно, сделаю по этой теме отдельную заметочку;
- потихоньку улучшается дока по CMake , поэтому рекомендую периодически ее посматривать - авторы за релиз обычно много всяких полезных уточнений делают/принимают от волонтеров
- на мобильных устройствах теперь левая колонка со ссылками спрятана в "бутерброд"-кнопку контекстного меню;
- старые генераторы для MSVC, которые принимали в своем имени битность архитектуры (вида "Visual Studio 2015 64") были дропнуты в пользу флага -A
- Пачка прочих изменений (384 мерж-реквестов было слито, и там сотни файлов и тысячи строк были дропнуты после удаления старых вещей)
- также там был влит мой "
фермерский" MR с фиксом кодировки текста ошибки, который можно получать через функцию
FormatMessage(), там неверно интерпретировалась строка как юникод (haha, classic).
Другие изменения - а я рассказал про удаленные вещи и про интересные экспериментальные фичи - можно глянуть в списке изменений тут:
https://cmake.org/cmake/help/v4.0/release/4.0.html#длиннопостик #смак #cmake #cpp #cxxmodules #profiling #build
v1.0.0-2025-03-09-0017
#длиннопостик
@AlexFailsChannel