Подано випуск складального інструментарію Qbs 1.21. Це восьмий випуск після відходу компанії Qt Company від розробки проекту, підготовленого силами спільноти, зацікавленої у продовженні розробки Qbs. Для складання Qbs серед залежностей потрібно Qt, хоча сам Qbs розрахований на організацію складання будь-яких проектів. Qbs використовує спрощений варіант мови QML для визначення сценаріїв складання проекту, що дозволяє визначати досить гнучкі правила складання, в яких можуть підключатися зовнішні модулі, використовувати функції JavaScript і створюватися довільні правила складання.
Мова сценаріїв, що використовується в 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-тип Message Для використання наданих платформою діалогових вікон, модуль 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% порівняно з використанням варіанта, що інтерпретується.
Джерело: opennet.ru