The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Доступен сборочный инструментарий Qbs 1.12, развиваемый проектом Qt

19.07.2018 21:06

Опубликован релиз развиваемого проектом Qt сборочного инструментария Qbs 1.12 (Qt Build Suite), который заменит qmake в Qt 6. Для сборки Qbs в качестве зависимости требуется Qt, хотя сам Qbs рассчитан на организацию сборки любых проектов. Qbs использует упрощённый вариант языка QML для определения сценариев сборки проекта, что позволяет определять достаточно гибкие правила сборки, в которых могут подключаться внешние модули, использоваться функции на JavaScript и создаваться произвольные правила сборки.

Используемый в Qbs язык сценариев адаптирован для автоматизации генерации и разбора сценариев сборки интегрированными средами разработки. Кроме того, Qbs не генерирует make-файлы, а сам, без посредников, таких как утилита make, контролирует запуск компиляторов и компоновщиков, оптимизируя процесс сборки на основе детального графа всех зависимостей. Наличие изначальных данных о структуре и зависимостях в проекте позволяет эффективно распараллеливать выполнение операций в несколько потоков. Для крупных проектов, состоящих из большого числа файлов и поддиректорий, производительность повторной пересборки с использованием Qbs может опережать make в разы - пересборка выполняется почти мгновенно и не заставляет разработчика тратить время на ожидание.

В новой версии:

  • Для упрощения оформления библиотек для применения в сторонних проектах реализованы два новых модуля: Exporter.qbs для создания qbs-модуля для итогового продукта и Exporter.pkgconfig для генерации файла ".pc" с метаданными pkgconfig. Указанные файлы включают информацию, необходимую для сборки сторонних проектов с предоставляемой библиотекой (например, в случае применения Exporter.qbs для использования библиотеки в другом qbs-проекте достаточно определить зависимость 'Depends { name: "mylib" }');
  • В утилиту qbs-config добавлен новый тип настроек - системные настройки, действующие для всех пользователей (например, пути поиска исполняемых файлов и библиотек). Для манипуляции системными настройками добавлена опция "--system", применение которой возможно только при наличии прав администратора;
  • Добавлен новый тип свойств varList для списков объектов;
  • В расширении FileInfo представлены две новые функции suffix и completeSuffix;
  • В блоке Rule свойство explicitlyDependsOn больше не заимствует зависимости из других зависимостей (для выполнения данной операции предложено отдельное свойство explicitlyDependsOnFromDependencies. Для исключения путаницы свойство excludedAuxiliaryInputs переименовано в excludedInputs;
  • Свойства cLanguageVersion и cxxLanguageVersion преобразованы в массивы и могут включать более одного значения, что позволяет в разных модулях определять разные требования к версиям языка;
  • В блок AutotestRunner добавлено свойство auxiliaryInputs для проверки наличия дополнительных ресурсов, необходимых для запуска autotest;
  • Во всех командах обеспечен вывод имени продукта для всех генерируемых объектов, что может быть полезно в больших проектах, в которых присутствует несколько продуктов, содержащих файлы с одинаковыми именами;
  • Добавлена возможность генерации сборочных файлов в формате Makefiles для проектов Qbs.


  1. Главная ссылка к новости (http://blog.qt.io/blog/2018/07...)
  2. OpenNews: Доступен сборочный инструментарий Qbs 1.11, развиваемый проектом Qt
  3. OpenNews: Разработчик языка XL опубликовал новую сборочную систему build
  4. OpenNews: Доступна система сборки Meson 0.42, на которую переходят systemd, GTK+ и GNOME
  5. OpenNews: Релиз генератора файлов сборки GNU Automake 1.16
  6. OpenNews: Релиз системы сборки CMake 3.12
Лицензия: CC-BY
Тип: Программы
Короткая ссылка: https://opennet.ru/48990-qbs
Ключевые слова: qbs, build
При перепечатке указание ссылки на opennet.ru обязательно
Обсуждение (22) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Аноним (1), 23:34, 19/07/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Юзаю qbs, нравится, особенно в сравнении с cmake, qmake и подобными
     
     
  • 2.2, Аноним_ка (?), 00:26, 20/07/2018 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Документирован только вот хреново.
     
  • 2.3, Аноним (3), 01:36, 20/07/2018 [^] [^^] [^^^] [ответить]  
  • +/
    А я попробовал и в ужасе вернулся на замечательный cmake.
     
     
  • 3.5, Тот_Самый_Анонимус (?), 05:56, 20/07/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Это называется «ниасилил».
     
     
  • 4.7, Владимир (??), 06:09, 20/07/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Нет, не обязательно. Я был и остаюсь Qbs-фаном (я стал его использовать в продакшене с версии 1.0.0), статьи на хабр писал для агитации. Но у Qbs остается много недостатков по сравнению с CMake.
    Один из главных на мой взгляд - разработчики забивают на то что нужно пользователям.
    Посмотрите сколько тикет висел на реализацию VS генератора после прохождения ревью. Три года.
    Сколько висит тикет на реализацию XCode генератора? он до сих пор открыт.
    Почитайте ченджлоги Qbs 1.12 и CMake 1.12
    Отсутствие вменяемой совместимости как у CMake. (1-2 релиза и прощай, пересборка QtC  возможна зачастую только ровно предыдущей версией его же (я о встроенной qbs поддержке)
    Отсутствие коммьюнити, мейл лист достаточно тухлый (по крайней мере был год назад, сейчас я от него отписан)
    Проект пилят полтора человека, не знаю почему Qt Company не выделяет больше ресурсов.

    Сама по себе идея и задумка хорошая, но очень сильно отставание от уходящего поезда CMake...

    ninja предоставляет ничуть не хуже скорости инкрементных сборок. Одна беда - скорость конфигурирования самого cmake (которую обычно приплюсовывают ко времени для сравнения с qbs).
    Если вам надо часто что-то переконфигурировать, а скрипты тяжелые, это беда-печаль. На моем проекте это около полуминуты.

     
     
  • 5.11, sokoloff (??), 11:09, 20/07/2018 [^] [^^] [^^^] [ответить]  
  • +/
    >Я был и остаюсь Qbs-фаном

    Владимир, можете показать ваш проект который собирается Qbs-ом. Интересно посмотреть на реальный пример. Я сейчас использую cmake. Qbs меня в свое время заинтересовал, но по "игрушечным" примерам из документации я не понял он удобнее будет чем cmake, или нет.

     
  • 5.14, Аноним (14), 14:50, 20/07/2018 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > Но у Qbs остается много недостатков по сравнению с CMake.

    Мой любимый недостаток - сложность запуска произвольных команд. В Qbs для запуска парочки произвольных команд нужно написать код на JavaScript, который делает следующее:

    1. Создает массив из аргументов команды.
    2. Создает объект Command, куда передается имя команды и массив с аргументами.
    3. Создает массив из объектов типа Command.
    4. Возвращает массив с объектами типа Command для присваивания Rule.prepare.

    Я понимаю, это соответствует идеологии Qbs с Яваскриптом во все поля, но получается слишком навороченно и не очень-то читабельно.

    add_custom_command в CMake смотрится гораздо проще и чище.

     
     
  • 6.15, Владимир (??), 18:01, 20/07/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Навороченно - да, на счет читабельно там 50/50, в случае мало-мальски сложного скрипта CMake начинает отставать.
    Когда прикручиваешь какой-то сраный def парсер или подобное, да, вымораживает.
    Зато блин в cmake для некоторых кастомных таргетов приходится конфигурить вспомогательные скрипты, а в qbs о таком можно забыть.

    Ну и да, не для "произвольного" когда все-таки, никто не мешает файлы прочитать просто в проперти той же) я так какое-то автоконфигурирование делал безо всяких Probe-ов, они тогда сырые были еще, не слежу как у них сегодня ситуация.


    ну и еще плюс к CMake - в нем просто ОХРЕНИТЕЛЬНАЯ стандартная библиотека. Написано скриптов поддержки фич на кучу разных платформ на все случаи жизни. Мне кажется в текущем виде CppModule.qbs очень плохо будет горизонтально масштабироваться.

     
  • 2.4, Tantrido (?), 05:02, 20/07/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Уже можно им QtC собрать?
     
     
  • 3.8, Владимир (??), 06:10, 20/07/2018 [^] [^^] [^^^] [ответить]  
  • +/
    qbs скрипты для QtC есть с версии 2.6, что ли. Так что ответ да - можно. Более того, я свой кастомный плагин только им и собираю, выходит намного быстрее, чем с qmakе  собрать только одну цель.
     
     
  • 4.9, Tantrido (?), 06:14, 20/07/2018 [^] [^^] [^^^] [ответить]  
  • +/
    > qbs скрипты для QtC есть с версии 2.6, что ли.

    Скрипты то есть, но говорят собрать ими QtC нельзя до сих пор.

     
     
  • 5.16, Владимир (??), 18:01, 20/07/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Блин, ну раз нельзя, пойду удалю свою сборку тогда, и коллегам скажу чтобы не использовали мои бинарники...
     
  • 5.18, Аноним (1), 21:13, 20/07/2018 [^] [^^] [^^^] [ответить]  
  • +/
    В блоге кьюта как раз сообщают об обратном
     
     
  • 6.19, Tantrido (?), 21:37, 20/07/2018 [^] [^^] [^^^] [ответить]  
  • +/
    > В блоге кьюта как раз сообщают об обратном

    Не знаю, у меня не собиралось и кютешники говорили, что не собирается. Это не разработчик ответил.

     

  • 1.10, anonymous (??), 09:00, 20/07/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +3 +/
    >В отличие от qmake, Qbs не привязан к Qt

    В каждой новости копипастят одно и то же. Автор похоже не в курсе, что Qbs требует qtbase и qtdeclarative. А вот qmake можно и без qt собрать. Было бы желание

     
  • 1.12, Sauron (??), 11:39, 20/07/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Научили бы его качать модули из внешнего репозитория таким образом, чтобы он работал на манер cargo, цены бы ему не было. Да и вроде кажется, что это не так уж сложно сделать было бы, но почему-то нет такой задачи, что огорчает.
     
     
  • 2.13, Вареник (?), 12:58, 20/07/2018 [^] [^^] [^^^] [ответить]  
  • +1 +/
    deb и rpm - по сути и есть репозитории для C/C++ проектов. Мультиплатформенный реп для С++ все равно неподъемная задача.

    Это для других языков самостоятельные мультиплатформенные репы - когда язык обеспечивает должную изоляцию от платформы.

     
  • 2.17, Владимир (??), 18:03, 20/07/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Ага, а еще распределённую сборку туда впихнуть. И возможность собирать по SSH. И блокчейн.

    p.s. простите за яд, это все правда клёво, но к сожалению там разработчики не справляются и с реализацией того что и так минимум нужно (точнее справляюсь, но крайне со скрипом)

     
     
  • 3.20, edolstra (?), 11:21, 21/07/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Уже сделали: https://nixos.org/nix/
     

  • 1.21, Аноним (21), 13:12, 22/07/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А как у него с кроссплатформенностью?
    В частности, можно ли собрать Android APK?
     
  • 1.22, username (??), 23:36, 22/07/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Не понимаю я пользователей этой штуки. Обратной совместимости толком нет, разработка живет в отдельной вселенной. Выше писали про необходимость городить на js банальные вещи.
    Зачем вы пользуетесь этим?
     
  • 1.23, klalafuda (?), 20:50, 23/07/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Ни дай бог на это целиком перейдет Qt6... :-/
     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Спонсоры:
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2020 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру