Состоялся релиз развиваемого проектом 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++ Build Tools;
  • В сообщениях об ошибках улучшен вывод информации о строке и позиции, в которой допущена ошибка;
  • В PkgConfigProbe предоставлен высокоуровневый API для разбора флагов компилятора и компоновщика, выводимых pkg-config;
  • Обеспечена возможность сборки qbs со статическим связыванием;
  • Изменения нарушающие совместимость: В свойстве cpp.linkerFlags прекращена обработка экранированных значений. Все файлы, входящие в набор (bundle) на платформах Apple, теперь помечаются как bundle.content. Базовая директория для исходных файлов теперь указывает на родительский каталог файла, в котором размещён этот файл, а не базовую директорию исходных текстов продукта.


Источник: http://www.opennet.ru/opennews/art.shtml?num=46620