mafulechka
mafulechka12 апреля 2020 г. 4:58

Новые функции в CMake 3.17

20 марта Kitware выпустил CMake 3.17.
Ниже есть некоторые изменения, которые должны улучшить жизнь разработчика Qt, использующего CMake.


Ninja Multi-Config Генератор

Этот генератор похож на генератор Ninja, но его можно использовать для создания нескольких конфигураций одновременно.

Эта функция аналогична функции debug_and_release в qmake.

В справочной документации генератора Ninja Multi-Config есть все мелкие детали.

Использование debug_and_release будет выглядеть как:

cmake -G"Ninja Multi-Config" \
  -DCMAKE_CONFIGURATION_TYPES=Release;Debug \
  -DCMAKE_DEFAULT_CONFIGS=all \
  -DCMAKE_CROSS_CONFIGS=all \
  -S source_dir \
  -B build_dir
cmake --build build_dir

Мульти-архитектура iOS для генераторов Ninja/Makefile

Теперь можно скомпилировать “fat” (мульти-архитектурные) двоичные файлы для iOS сразу.
Использование командной строки будет выглядеть как:

cmake -GNinja \
  -DCMAKE_BUILD_TYPE=Release \
  -DCMAKE_SYSTEM_NAME=iOS \
  -DCMAKE_OSX_ARCHITECTURES=arm64;x86_64
  -S source_dir \
  -B build_dir
cmake --build build_dir

AUTOGEN использует файлы зависимостей генерированных moc-файлов

Qt 5.15 приносит нам обновленный moc, который может генерировать файл зависимостей, который, в свою очередь, будет использоваться Ninja для (пере)сборки только необходимых битов.

Это означает, что для такого проекта, как Qt Creator, нулевая сборка будет выполняться быстрее, поскольку все цели AUTOGEN больше не нужно будет строить.

С Windows 10 разработчики тестировали CMake 3.17, Ninja 1.10, Qt 5.15.0 с Qt Creator, и нулевые сборки (в среднем за 5 прогонов) работали с 4,6 секунды с CMake 3,16 до 2,4 секунды с CMake 3,17!

У Qt Creator все еще есть несколько пользовательских целей, которые нужно выполнить (копирование общих файлов, включение файлов и т. д.) и они заполняют эти 2,4 секунды.

Ninja не перезапускает CMake после настройки

Возможно, вы заметили, что после открытия проекта CMake в Qt Creator и нажатия кнопки “Build” Ninja перезапустит CMake на уже настроенном проекте.

В зависимости от размера проекта или платформы, это может быть очень раздражающим. Конфигурация Qt Creator CMake может занять до 30 секунд на компьютере разработчика с Windows 10.

С Ninja версии 1.10 и CMake версии 3.17 это раздражающее поведение исчезло!

В комплект Qt SDK входят Ninja и CMake, к сожалению, версия 1.9 Ninja и версия 3.16 CMake.

Заголовки ccache и precompile

Для проектов, которые используют заголовочный файл для ускорения компиляции через предварительно скомпилированные заголовки и используют ccache для кэширования артефактов сборки, теперь ccache будет иметь 100%-ную частоту попаданий в кэш!

CMake скопирует временную метку заголовка для своего внутреннего механизма предварительно скомпилированных заголовков, и ccache не подумает, что артефакт PCH слишком новый.

Qt Creator использует заголовок src/shared/qtcreator_gui_pch.h.

Для ccache необходимо указать include_file_mtime.

На данный момент это работает только с GCC. Конфигурация заголовков прекомпиляции CMake Clang не поддерживается ccache.

Генерирование исправных zip и 7zip архивов

CMake через cmake -E командная строка tar может извлекать архивы tar.gz, tar.bz, tar.xz, tar.zstd, zip, 7z или создавать архивы.

Это может быть полезно в системах CI, где на всех платформах не установлены необходимые инструменты, но установлен CMake.

Архивы Zip и 7zip будут содержать текущий каталог. в архиве. Хотя это не создает проблем для tar-архивов, Zip-архив не может быть открыт в Windows с помощью проводника Windows, а 7zip-архив может вызвать проблемы (сбои) в KDE.

Рекомендуем хостинг TIMEWEB
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.

Вам это нравится? Поделитесь в социальных сетях!

Комментарии

Только авторизованные пользователи могут публиковать комментарии.
Пожалуйста, авторизуйтесь или зарегистрируйтесь
d
  • dsfs
  • 26 апреля 2024 г. 1:56

C++ - Тест 004. Указатели, Массивы и Циклы

  • Результат:80баллов,
  • Очки рейтинга4
d
  • dsfs
  • 26 апреля 2024 г. 1:45

C++ - Тест 002. Константы

  • Результат:50баллов,
  • Очки рейтинга-4
d
  • dsfs
  • 26 апреля 2024 г. 1:35

C++ - Тест 001. Первая программа и типы данных

  • Результат:73баллов,
  • Очки рейтинга1
Последние комментарии
k
kmssr8 февраля 2024 г. 15:43
Qt Linux - Урок 001. Автозапуск Qt приложения под Linux как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
АК
Анатолий Кононенко4 февраля 2024 г. 22:50
Qt WinAPI - Урок 007. Работаем с ICMP Ping в Qt Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
EVA
EVA25 декабря 2023 г. 7:30
Boost - статическая линковка в CMake проекте под Windows Ошибка LNK1104 часто возникает, когда компоновщик не может найти или открыть файл библиотеки. В вашем случае, это файл libboost_locale-vc142-mt-gd-x64-1_74.lib из библиотеки Boost для C+…
J
JonnyJo25 декабря 2023 г. 5:38
Boost - статическая линковка в CMake проекте под Windows Сделал всё по-как у вас, но выдаёт ошибку [build] LINK : fatal error LNK1104: не удается открыть файл "libboost_locale-vc142-mt-gd-x64-1_74.lib" Хоть убей, не могу понять в чём дел…
G
Gvozdik18 декабря 2023 г. 18:01
Qt/C++ - Урок 056. Подключение библиотеки Boost в Qt для компиляторов MinGW и MSVC Для решения твой проблемы добавь в файл .pro строчку "LIBS += -lws2_32" она решит проблему , лично мне помогло.
Сейчас обсуждают на форуме
G
Gar22 апреля 2024 г. 2:46
Clipboard Как скопировать окно целиком в clipb?
DA
Dr Gangil Academics20 апреля 2024 г. 4:45
Unlock Your Aesthetic Potential: Explore MSC in Facial Aesthetics and Cosmetology in India Embark on a transformative journey with an msc in facial aesthetics and cosmetology in india . Delve into the intricate world of beauty and rejuvenation, guided by expert faculty and …
a
a_vlasov14 апреля 2024 г. 3:41
Мобильное приложение на C++Qt и бэкенд к нему на Django Rest Framework Евгений, добрый день! Такой вопрос. Верно ли следующее утверждение: Любое Android-приложение, написанное на Java/Kotlin чисто теоретически (пусть и с большими трудностями) можно написать и на C+…
Павел Дорофеев
Павел Дорофеев13 апреля 2024 г. 23:35
QTableWidget с 2 заголовками Вот тут есть кастомный QTableView с многорядностью проект поддерживается, обращайтесь
f
fastrex4 апреля 2024 г. 1:47
Вернуть старое поведение QComboBox, не менять индекс при resetModel Добрый день! У нас много проектов в которых используется QComboBox, в версии 5.5.1, когда модель испускает сигнал resetModel, currentIndex не менялся. В версии 5.15 при resetModel происходит try…

Следите за нами в социальных сетях