Используемый в Qbs язык сценариев адаптирован для автоматизации генерации и разбора сценариев сборки интегрированными средами разработки. Кроме того, Qbs не генерирует make-файлы, а сам, без посредников, таких как утилита make, контролирует запуск компиляторов и компоновщиков, оптимизируя процесс сборки на основе детального графа всех зависимостей. Наличие изначальных данных о структуре и зависимостях в проекте позволяет эффективно распараллеливать выполнение операций в несколько потоков. Для крупных проектов, состоящих из большого числа файлов и поддиректорий, производительность повторной пересборки с использованием Qbs может опережать make в разы — пересборка выполняется почти мгновенно и не заставляет разработчика тратить время на ожидание.
Напомним, что в 2018 году компанией Qt Company было принято решение о прекращении разработки Qbs. Qbs развивался как замена qmake, но в конечном счёте было решено использовать CMake в качестве основной сборочной системы для Qt в долгосрочной перспективе. Разработка Qbs теперь продолжена в форме независимого проекта, поддерживаемого силами сообщества и заинтересованными разработчиками. Для разработки пока продолжает использоваться инфраструктура Qt Company.
Основные новшества Qbs 1.21:
- Переделан механизм провайдеров модулей (генераторов модулей). Для фреймворков, таких как Qt и Boost, теперь можно использовать более одного провайдера, определять какой из провайдеров запускать при помощи нового свойства qbsModuleProviders и указывать приоритет для выбора сгенерированных разными провайдерами модулей. Например, можно указать два провайдера «Qt» и «qbspkgconfig», первый из которых попытается использовать пользовательскую установку Qt (через поиск qmake), и если подобная установка не будет найдена второй провайдер попытается задействовать Qt, предоставляемый системой (через вызов pkg-config):
CppApplication { Depends { name: "Qt.core" } files: "main.cpp" qbsModuleProviders: ["Qt", "qbspkgconfig"] }
- Добавлен провайдер «qbspkgconfig«, который пришёл на смену провайдеру модулей «fallback«, пытавшемуся сгенерировать модуль при помощи pkg-config, если искомый модуль не был сгенерирован другими провайдерами. В отличие от «fallback» в «qbspkgconfig» вместо вызова
утилиты pkg-config применяется встроенная C++ библиотека для прямого чтения файлов «.pc», что позволяет ускорить работу и получить дополнительную информацию о зависимостях пакетов, недоступную при вызове утилиты pkg-config. - Добавлена поддержка спецификации C++23, определяющей будущий стандарт C++.
- Для инструментария GCC добавлена поддержка архитектуры Elbrus E2K.
- Для платформы Android добавлено свойство Android.ndk.buildId, позволяющее переопределить значение по умолчанию для флага компоновщика «—build-id».
- В модулях capnproto и protobuf реализована возможность использования runtime, предоставленных провайдером qbspkgconfig.
- Решены проблемы с отслеживанием изменений в файлах с исходным кодом на платформе FreeBSD, возникавшие из-за отбрасывания миллисекунд при оценке времени изменения файла.
- Добавлено свойство ConanfileProbe.verbose, упрощающее отладку проектов, использующих пакетный менеджер Conan.
Дополнительно можно отметить начало альфа-тестирования фреймворка Qt 6.3, в котором реализован новый модуль «Qt Language Server» с поддержкой протоколов Language Server и JsonRpc 2.0, в модуль Qt Core добавлена большая порция новых функций, в модуле Qt Quick Dialogs реализован QML-тип MessageDialog для использования предоставляемых платформой диалоговых окон, в модуль Qt Wayland Compositor добавлен композитный сервер Qt Shell и API для создания собственных расширений пользовательской оболочки.
В модуле Qt QML предложена реализация компилятора qmltc (QML type compiler), позволяющего скомпилировать структуры объектов QML в классы на языке C++. Для коммерческих пользователей Qt 6.3 началось тестирование продукта Qt Quick Compiler, который помимо вышеотмеченного QML Type Compiler включает QML Script Compiler, позволяющий компилировать функции и выражения QML в код на C++. Отмечается, что применение Qt Quick Compiler позволит приблизить производительность программ на базе QML к нативным программам, в частности при компиляции расширений отмечается сокращение времени запуска и выполнения приблизительно на 30% по сравнению с использованием интерпретируемого варианта.
Источник: http://www.opennet.ru/opennews/art.shtml?num=56515