Разработчики Qt представили инструментарий для сборки проектов qbs

Разработчики из компании Nokia представили новый экспериментальный сборочный инструментарий qbs (Qt Build Suite), предназначенный для сборки приложений, основываясь на данных файла-проекта, все команды которого записаны на упрощенном диалекте языка QML. Файл с правилами сборки описывает только один проект, который в тоже время может содержать несколько разных программных продуктов, каждый из которых может иметь свой тип (приложение, библиотека и так далее) и отдельную схему сборки. Код qbs открыт под лицензией LGPL.

Использование упрощённой версии QML для оформления файлов с правилами сборки с одной стороны упрощает интеграцию с интегрированными средами разработки, а с другой позволяет реализовать нестандартные шаги, интегрируя в файл сборки функции, реализованные на языке JavaScript, а также подключая внешние модули. Например, в qbs можно создавать свои дополнительные правила, позволяющие задействовать дополнительные генераторы кода и компиляторы ресурсов, для трансформации файлов из одного типа в другой. Исходя из данного высокоуровневого описания в проектном файле, qbs генерирует корректный и очень подробный граф всех зависимостей проекта. В отличии от qmake, — qbs жестко не привязан к Qt и может использоваться для организации сборки любых программных продуктов.

Главное же отличие qbs в том, что классические makefile-генераторы, такие как qmake или CMake, создают лишь makefile’ы, оставляя непосредственно процесс сборки на откуп таких инструментов, как make или ninja. В отличие от данной схемы, qbs берёт на себя и роль утилиты make, без посредников напрямую запуская компиляторы, линковщики или другие инструменты сборки, такие как SCons или Ant. Сборка осуществляется в режиме параллельного выполнения нескольких сборочных потоков. Qbs изначально видит весь проект целиком, без необходимости поиска дополнительных сборочных файлов в поддиректориях, что позволяет в сочетании с техникой инкрементальной сборки достигнуть высокой производительности, заметно опережающей стандартную утилиту make. Например, для проекта из 200 библиотек, по 50 C++ классов в каждой, повторная пересборка, в ситуации когда с прошлой сборки не внесено изменений, занимает в qbs 0.843 сек., а при использовании make более 4 секунд.

Отмечается, что по сравнению с такими пакетами, как CMake и GNU Autotools, в qbs пока мало возможностей для организации полноценной кросс-платформенной сборки, учитывающей многочисленные нюансы различных программных окружений. Поэтому qbs пока невозможно использовать для серьёзных проектов в качестве полноценного аналога CMake и GNU Autotools. Тем не менее, подчеркивается, что qbs ещё на начальной стадии развития и воспринимать его следует пока только как экспериментальный проект.

Пример простого сборочного файла helloworld.qbp:

    import qbs.base 1.0
 
    Application {
        name: "HelloWorld"
        files: "main.cpp"
        Depends { name: "cpp" }
    }

Более сложный пример, с импортом вспомогательной функции planetsCorrectlyAligned из файла helpers.js.

    import qbs.base 1.0
    import "helpers.js" as Helpers

    Product {
        name: "myproject"
        Group {
            condition: Helpers.planetsCorrectlyAligned()
            file: "magic_hack.cpp"
        }
    }

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.