Выпуск сборочного инструментария qbs 1.8, развиваемого проектом Qt
Состоялся релиз развиваемого проектом Qt сборочного инструментария qbs 1.8 (Qt Build Suite), который заменит qmake в Qt 6. В отличие от qmake, qbs не привязан к Qt и изначально рассчитан на организацию сборки любых проектов. Qbs использует упрощенный вариант языка QML для определения сценариев сборки проекта, что позволяет определять достаточно гибкие правила сборки, в которых могут подключаться внешние модули, использоваться функции на JavaScript и создаваться произвольные правила сборки.
Используемый в qbs язык сценариев адаптирован для автоматизации генерации и разбора сценариев сборки интегрированными средами разработки. Кроме того, qbs не генерирует make-файлы, а сам, без посредников, таких как утилита make, контролирует запуск компиляторов и компоновщиков, оптимизируя процесс сборки на основе детального графа всех зависимостей. Наличие изначальных данных о структуре и зависимостях в проекте позволяет эффективно распараллеливать выполнение операций в несколько потоков. Для крупных проектов, состоящих из большого числа файлов и поддиректорий, производительность повторной пересборки с использованием qbs может опережать make в разы - пересборка выполняется почти мгновенно и не заставляет разработчика тратить время на ожидание.
В новой версии:
- Добавлена начальная поддержка сборки приложений для ОС QNX. Поддерживаются следующие версии QNX SDK: SDP 6.5, SDP 6.6 и SDP 7.0
- Обеспечена официальная поддержка сборки приложений для FreeBSD. Несмотря на то, что возможность сборки для FreeBSD была доступная изначально, FreeBSD не была отмечена как целевая платформа. В новой версии проекты для которых указана платформа FreeBSD могут быть собраны без дополнительной настройки сборочного окружения;
- Улучшено обеспечение процесса сборки для Android, например, добавлена возможность использования Qbs при сборке для Android из среды разработки Qt Creator и учета зависимостей для модулей Qt;
- Добавлен новый синтаксис "product.modulename.propertyname" для доступа к свойствам модулей из расширений на JavaScript. Например, вместо product.moduleProperty("cpp", "compilerFlags") теперь можно указать product.cpp.compilerFlags.
- Реализована поддержка свойств, доступных только для чтения. Попытке изменения значения свойств, которые определены с модификатором readonly, приведет к генерации ошибки;
- Элементы Probe теперь допустимы в элементах Project, что позволяет логически структурировать проверки, не зависящие от контекста конкретного продукта;
- Функции loadFile() и loadExtension() заменены на вызов require() и будут объявлены устаревшими в одном из следующих выпусков;
- Обеспечена возможность запуска Qbs без профиля, реализуя новую стратегию сборки, основанную на автоматической настройке и проверках, вместо применения заранее определенных профилей. Например, запуск qbs из командной строки в случае отсутствия профиля по умолчанию или указании "profile:none" теперь автоматически выполнит сборку для текущей архитектуры, используя наиболее оптимальный из доступных инструментариев.
- Добавлена новая утилита qbs-create-project для автоматической генерации файлов с параметрами проекта на основе имеющейся структуры каталогов.
- В qbs-setup-toolchains добавлена поддержка сборочных инструментов Visual C++;
- В сообщениях об ошибках улучшен вывод информации о сроке и позиции, в которой допущена ошибка;
- В PkgConfigProbe предоставлен высокоуровневый API для разбора флагов компилятора и компоновщика, выводимых pkg-config;
- Обеспечена возможность сборки qbs со статическим связыванием;
- Изменения нарушающие совместимость: В свойстве cpp.linkerFlags прекращена обработка экранированных значений. Все файлы, входящие в набор (bundle) на платформах Apple, теперь помечаются как bundle.content. Базовая директория для исходных файлов теперь указывает на родительский каталог файла, в котором размещен этот файл, а не базовую директорию исходных текстов продукта.