The OpenNET Project / Index page

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

Выпуск сборочного инструментария qbs 1.8, развиваемого проектом Qt

29.05.2017 20:17

Состоялся релиз развиваемого проектом 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. Базовая директория для исходных файлов теперь указывает на родительский каталог файла, в котором размещён этот файл, а не базовую директорию исходных текстов продукта.


  1. Главная ссылка к новости (http://blog.qt.io/blog/2017/05...)
  2. OpenNews: Разработчики из компании Google открыли код системы сборки Ninja
  3. OpenNews: Twitter представил первый значительный выпуск системы сборки Pants
  4. OpenNews: Для GNOME-приложений представлена новая экспериментальная система сборки BuilDj
  5. OpenNews: Первый публичный выпуск сборочного инструментария build2
  6. OpenNews: Компания Google развивает новую открытую систему сборки Bazel
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/46620-qbs
Ключевые слова: qbs, build
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (51) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, nc (ok), 22:20, 29/05/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    Опробовать его что-ли для нового проекта... Штука-то явно хорошая.
     
     
  • 2.3, A.Stahl (ok), 22:28, 29/05/2017 [^] [^^] [^^^] [ответить]  
  • +2 +/
    >Qbs использует упрощённый вариант языка QML для определения сценариев ... в которых могут ... использоваться функции на JavaScript

    Технически, может, и не плохо, но не факт что этим приятно будет пользоваться. У меня, плюсовика, как-то не много энтузиазма обмазываться вебятиной и писать мейкфайлы на ЯваСкрипте. Потыкать палочкой нужно, может там не всё так и плохо, но что-то стрёмно...

     
     
  • 3.4, Аноним (-), 22:31, 29/05/2017 [^] [^^] [^^^] [ответить]  
  • +6 +/
    JS != вебятина, хотя да, JS это вебятина, а вот ECMAScript(JS без браузерного апи), который скорее-всего и имелся в виду - это скриптовой язык, такой же как Lua и остальные
     
     
  • 4.6, anonymous (??), 22:49, 29/05/2017 [^] [^^] [^^^] [ответить]  
  • +/
    >такой же как Lua

    Жирноват он.

     
     
  • 5.7, Аноним (-), 22:50, 29/05/2017 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Ну это уже от реализации зависит
     
     
  • 6.9, anonymous (??), 23:01, 29/05/2017 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Ну это уже от реализации зависит

    Можно подумать, там есть выбор.

     
  • 3.13, Аноним (-), 23:18, 29/05/2017 [^] [^^] [^^^] [ответить]  
  • +4 +/
    У JS хотя бы синтаксис похож на сишный, в отличие от того безобразия, что в cmake
     
     
  • 4.18, anonymous (??), 23:58, 29/05/2017 [^] [^^] [^^^] [ответить]  
  • –4 +/
    > У JS хотя бы синтаксис похож на сишный, в отличие от того
    > безобразия, что в cmake

    Это в каком же месте он похож?

     
     
  • 5.24, НяшМяш (ok), 00:32, 30/05/2017 [^] [^^] [^^^] [ответить]  
  • +9 +/
    Эээ, фигурные скобочки - есть, разделитель ; - есть, большинство синтаксических конструкций - тоже. Во всяком случае, сишнику куда проще читать ябыскрипт, чем какой-нибудь упрт пайтон.
     
     
  • 6.30, anonymous (??), 09:38, 30/05/2017 [^] [^^] [^^^] [ответить]  
  • –5 +/
    >куда проще читать ябыскрипт, чем какой-нибудь упрт пайтон

    А что не так с пайтоном? Вот честно, не понимаю твоих трудностей.

     
     
  • 7.36, Аноним (-), 10:54, 30/05/2017 [^] [^^] [^^^] [ответить]  
  • +/
    не выйдет не читая ничего что-то напрограммить, а в js можно попробовать воткнуть код от c++ и если не заработает как надо, только тогда иди за документами :)
    Но это не + на мой взгляд, а питон, да ну его, php проще :)
     
  • 3.25, Отражение луны (ok), 00:43, 30/05/2017 [^] [^^] [^^^] [ответить]  
  • –2 +/
    > вебятина

    Вернул 2007й?

     
  • 2.47, Grammar Narziss (?), 16:53, 30/05/2017 [^] [^^] [^^^] [ответить]  
  • +/
    «что ли», Буратино
     

  • 1.2, Аноним (-), 22:26, 29/05/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    > JavaScript

    Triggered

     
  • 1.5, Not Secure (?), 22:33, 29/05/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    меня и CMake вполне устраивает
     
     
  • 2.8, anonymous (??), 22:50, 29/05/2017 [^] [^^] [^^^] [ответить]  
  • +/
    > меня и CMake вполне устраивает

    А какая разница. Всё равно в Qt6 его будут тащить.

     
  • 2.15, Tat (ok), 23:32, 29/05/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    CMake никуда убирать не планируют. Более того, наоборот, планирует увеличивать его поддержку.
     

  • 1.10, Аноним (-), 23:08, 29/05/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    >Qt Build Suite, который заменит qmake в Qt 6

    Ну наконец-то они это озвучили. А то пилят, а сами qmake используют. Отсюда сомнение каке-то о проекте.

     
     
  • 2.12, anonymous (??), 23:13, 29/05/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    >>Qt Build Suite, который заменит qmake в Qt 6
    > Ну наконец-то они это озвучили. А то пилят, а сами qmake используют.
    > Отсюда сомнение каке-то о проекте.

    А что тут сомневаться? Фанбои жаваскрипта там окопались. Они так JS и в QtCore пропихнут.

     
     
  • 3.35, фтттт (?), 09:54, 30/05/2017 [^] [^^] [^^^] [ответить]  
  • +/
    ты предпочитаеш Guile ?
     
  • 3.45, Вареник (?), 16:34, 30/05/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Как угробить лучшую С++ библиотеку и заставить С++ жрать больше C#, Java и Python вместе взятых? Ну конечно воткнуть JS во все.

    Даешь еще внедрение AOP вставок на JS, в qtCore. Модно, свежо, достаточно извращенно чтобы удивить пересыщенную публику.

     
     
  • 4.48, K.O. (?), 17:28, 30/05/2017 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Вот не понимаю как система сборки может заставить С++ "жрать больше C#". А как же скриптовые ./configure + make?
     

  • 1.11, anonymous (??), 23:12, 29/05/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    В зависимостях QtCore и QtScript. Да оно пожирнее cmake выходит. Опять какой-то умник решил за всех.
     
  • 1.14, anonymous (??), 23:29, 29/05/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    >В отличие от qmake, qbs не привязан к Qt

    Хм...

    $ cd qbs-src-1.8.0
    $ find . -type f -name *.cpp | xargs cat | grep QString | wc -l

    4316

     
     
  • 2.17, Чебурашка (?), 23:58, 29/05/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Умник штoле? Он не привязан к Qt в том смысле, что поддержка Qt там сделана средствами самой системы сборки, а не прибита гвоздями к ядру, как в qmake.
     
     
  • 3.20, anonymous (??), 00:03, 30/05/2017 [^] [^^] [^^^] [ответить]  
  • +4 +/
    > а не прибита гвоздями к ядру, как в qmake.

    Чего там у тебя прибито?


    $ ldd /opt/qt58/bin/qmake
    linux-gate.so.1 =>  (0xb77cf000)
    libstdc++.so.6 => /usr/lib/i386-linux-gnu/libstdc++.so.6 (0xb76c3000)
    libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0xb767d000)
    libgcc_s.so.1 => /lib/i386-linux-gnu/libgcc_s.so.1 (0xb765f000)
    libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb74af000)
    /lib/ld-linux.so.2 (0x800f0000)

    >Он не привязан к Qt в том смысле, что поддержка Qt там сделана средствами самой системы сборки

    Ага, написано с использованием Qt и при этом не привязано к Qt. Ты хоть читаешь, что сам пишешь?

     
     
  • 4.37, Аноним (-), 11:35, 30/05/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    >> а не прибита гвоздями к ядру, как в qmake.
    > Чего там у тебя прибито?

    Прибито, просто в QMake и прочих Qt-шных сборочных утилитах (moc, rcc, uic и т.п.) необходимые части Qt статически вкомпилируются в бинарники и потому наружу не торчат. Впрочем, там по-другому особо и не получится, т.к. иначе при сборке самого Qt возникала бы проблема курицы и яйца, а с бутстрапом заморачиваться не стали.

     
  • 3.42, Аноним (-), 13:29, 30/05/2017 [^] [^^] [^^^] [ответить]  
  • +/
    В qmake поддержка Qt тоже сделана через .prf файлы
     
  • 3.51, Аноним (-), 13:47, 31/05/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    А что в плюсах своих строк нету?
     
  • 2.22, trolleybus (?), 00:10, 30/05/2017 [^] [^^] [^^^] [ответить]  
  • +2 +/
    "Не привязана к Qt" - это значит "может быть использована для не-Qt проектов". То есть, сама QBS написана на Qt, но проекты, ее использующие, могут быть совсем не связанными с Qt.

     
     
  • 3.23, anonymous (??), 00:14, 30/05/2017 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > "Не привязана к Qt" - это значит "может быть использована для не-Qt
    > проектов". То есть, сама QBS написана на Qt, но проекты, ее
    > использующие, могут быть совсем не связанными с Qt.

    Ставить Qt для сборки проекта без Qt? Какое-то бредовое применение...

     
     
  • 4.26, chig00 (ok), 04:43, 30/05/2017 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Ставить надо только библиотеки Qt, они и так в 95% случаев стоят на десктопах, даже на пользовательских. Точно так-же если писать код в gedit, то нужно будет поставить GTK, хотя проект может быть написан хоть на ассемблере.
     
     
  • 5.32, anonymous (??), 09:43, 30/05/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > Ставить надо только библиотеки Qt, они и так в 95% случаев стоят
    > на десктопах, даже на пользовательских. Точно так-же если писать код в
    > gedit, то нужно будет поставить GTK, хотя проект может быть написан
    > хоть на ассемблере.
    >в 95% случаев стоят на десктопах

    Я тебе открою секрет. Сборка может быть произведена не только на десктопах...

     
     
  • 6.34, фтттт (?), 09:51, 30/05/2017 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Я тебе открою секрет, Qt есть не только на десктопах
     
     
  • 7.39, Аноним (-), 12:20, 30/05/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Только вот он нафиг не нужен на сервере.
     
     
  • 8.40, A.Stahl (ok), 12:36, 30/05/2017 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Qt, внезапно, это не только окошки Но тулкитофобы обычно такими мелочами не и... текст свёрнут, показать
     
     
  • 9.41, Аноним (-), 13:06, 30/05/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Я не тулкитофоб, но найди мне хоть одну серверную софтину на Qt Web-сервер, там... текст свёрнут, показать
     
  • 4.28, Аноним_oyc (?), 09:28, 30/05/2017 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Только qtcore, как сказали выше. Не нужно ставить все части, Qt 5 хорошо порезан.
     
     
  • 5.33, anonymous (??), 09:45, 30/05/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > Только qtcore, как сказали выше. Не нужно ставить все части, Qt 5
    > хорошо порезан.

    Про QtScript ты  специально умалчиваешь? И интересно, где там отдельный тарбол для qtcore.

     
     
  • 6.44, VladSh (?), 16:13, 30/05/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Qt Script deprecated in Qt 5.5.
     
  • 3.27, Аноним (-), 09:14, 30/05/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Внезапно, qmake тоже можно использовать для сборки проектов, не зависящих от Qt.

    QT -= core, и вперед.

     

  • 1.16, Чебурашка (?), 23:49, 29/05/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    Хорошая штука на самом деле
    Перевели на работе на него два небольших Qt-шных проекта c богомерзкого CMake, пока всем нравится
    Из плюсов: человекочитаемые билд скрипты, простой как топор - полноценно начать юзать можно за вечер, qt и android из коробки, нормальная система профилей вместо костыльных тулчейнов в cmake.
    Минусы: доки хромают, готовься читать исходники; не хватает некоторых фич (например нет аналога cmake-овских FindXXX, только pkgconfig probe или указывать флаги руками если винда); пару раз были глюки с генератором проектов для msvc.
    На небольших проектах (~15kloc) по скорости сильной разницы с CMake + Makefiles не было замечено
     
     
  • 2.38, Аноним (-), 11:42, 30/05/2017 [^] [^^] [^^^] [ответить]  
  • +/
    > по скорости сильной разницы с CMake + Makefiles не было замечено

    А с CMake + Ninja? Гененрируемые CMake-ом мейкфайлы -- это треш и угар с хитрой системой вызовов одного из другого и прочими непотребствами.

     
     
  • 3.43, Владимир (??), 15:53, 30/05/2017 [^] [^^] [^^^] [ответить]  
  • –2 +/
    А с нинзя фанбои qbs обычно не сравнивают, всегда с богомерзким make. Ninja рвет просто qbs в инкрементных билдах - поэтому лично я от него отказался. На мелких проектах меньше 100к SLOC, да, QBS можно поюзать.
     

  • 1.19, anonymous yet another (?), 00:02, 30/05/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > Добавлена начальная поддержка сборки приложений для ОС QNX.

    ...
    > Обеспечена официальная поддержка сборки приложений для FreeBSD.

    Похоже, можно только то, что "предусмотрели" авторы. Ну и JavaScript умиляет.

     
     
  • 2.21, anonymous (??), 00:04, 30/05/2017 [^] [^^] [^^^] [ответить]  
  • +/
    >> Добавлена начальная поддержка сборки приложений для ОС QNX.
    > ...
    >> Обеспечена официальная поддержка сборки приложений для FreeBSD.
    > Похоже, можно только то, что "предусмотрели" авторы. Ну и JavaScript умиляет.

    Если бы один только жаваскрипт...

     
  • 2.29, Аноним_oyc (?), 09:32, 30/05/2017 [^] [^^] [^^^] [ответить]  
  • +/
    JavaScript там без веба.

    PS Ну были бы там Python, Ruby, сильно быстрее было бы?

     
     
  • 3.46, Вареник (?), 16:39, 30/05/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > JavaScript там без веба.
    > PS Ну были бы там Python, Ruby, сильно быстрее было бы?

    Было бы не так богомерзко.

     
  • 2.31, фтттт (?), 09:42, 30/05/2017 [^] [^^] [^^^] [ответить]  
  • +/
    >>Похоже, можно только то, что "предусмотрели" авторы. Ну и JavaScript умиляет.

    Ты не прав, и прав ;) !111
    Авторы предусмотрели возможность написания своих модулей.

     

  • 1.49, Аноним (-), 18:45, 30/05/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    А как у него с поиском зависимостей? т.е. как устроен поиск сторонних библиотек
     
     
  • 2.50, фтттт (?), 08:02, 31/05/2017 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Там есть такая фигня как Probe - http://doc.qt.io/qbs/probe-item.html
    Ты ее конфигурируеш, пишеш на javascript что и где искать.
    Есть небольшой набор проб в поставке - http://code.qt.io/cgit/qt-labs/qbs.git/tree/share/qbs/imports/qbs/Probes

    Конкретно для библиотек - http://code.qt.io/cgit/qt-labs/qbs.git/tree/share/qbs/imports/qbs/Probes/PkgC - запускает pkg-config, парсит его вывод.

    Второй вариант, если один из подпроектов зависит от другого подпроекта - то зависимость указывается через Depends - http://doc.qt.io/qbs/depends-item.html

     

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



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

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