Состоялся (http://blog.qt.io/blog/2017/05/29/qbs-1-8-released/) релиз развиваемого проектом Qt сборочного инструментария qbs 1.8 (http://qt-project.org/wiki/qbs) (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. Базовая директория для исходных файлов теперь указывает на родительский каталог файла, в котором размещён этот файл, а не базовую директорию исходных текстов продукта.URL: http://blog.qt.io/blog/2017/05/29/qbs-1-8-released/
Новость: https://www.opennet.ru/opennews/art.shtml?num=46620
Опробовать его что-ли для нового проекта... Штука-то явно хорошая.
>Qbs использует упрощённый вариант языка QML для определения сценариев ... в которых могут ... использоваться функции на JavaScriptТехнически, может, и не плохо, но не факт что этим приятно будет пользоваться. У меня, плюсовика, как-то не много энтузиазма обмазываться вебятиной и писать мейкфайлы на ЯваСкрипте. Потыкать палочкой нужно, может там не всё так и плохо, но что-то стрёмно...
JS != вебятина, хотя да, JS это вебятина, а вот ECMAScript(JS без браузерного апи), который скорее-всего и имелся в виду - это скриптовой язык, такой же как Lua и остальные
>такой же как LuaЖирноват он.
Ну это уже от реализации зависит
> Ну это уже от реализации зависитМожно подумать, там есть выбор.
У JS хотя бы синтаксис похож на сишный, в отличие от того безобразия, что в cmake
> У JS хотя бы синтаксис похож на сишный, в отличие от того
> безобразия, что в cmakeЭто в каком же месте он похож?
Эээ, фигурные скобочки - есть, разделитель ; - есть, большинство синтаксических конструкций - тоже. Во всяком случае, сишнику куда проще читать ябыскрипт, чем какой-нибудь упрт пайтон.
>куда проще читать ябыскрипт, чем какой-нибудь упрт пайтонА что не так с пайтоном? Вот честно, не понимаю твоих трудностей.
не выйдет не читая ничего что-то напрограммить, а в js можно попробовать воткнуть код от c++ и если не заработает как надо, только тогда иди за документами :)
Но это не + на мой взгляд, а питон, да ну его, php проще :)
> вебятинаВернул 2007й?
«что ли», Буратино
> JavaScriptTriggered
меня и CMake вполне устраивает
> меня и CMake вполне устраиваетА какая разница. Всё равно в Qt6 его будут тащить.
CMake никуда убирать не планируют. Более того, наоборот, планирует увеличивать его поддержку.
>Qt Build Suite, который заменит qmake в Qt 6Ну наконец-то они это озвучили. А то пилят, а сами qmake используют. Отсюда сомнение каке-то о проекте.
>>Qt Build Suite, который заменит qmake в Qt 6
> Ну наконец-то они это озвучили. А то пилят, а сами qmake используют.
> Отсюда сомнение каке-то о проекте.А что тут сомневаться? Фанбои жаваскрипта там окопались. Они так JS и в QtCore пропихнут.
ты предпочитаеш Guile ?
Как угробить лучшую С++ библиотеку и заставить С++ жрать больше C#, Java и Python вместе взятых? Ну конечно воткнуть JS во все.Даешь еще внедрение AOP вставок на JS, в qtCore. Модно, свежо, достаточно извращенно чтобы удивить пересыщенную публику.
Вот не понимаю как система сборки может заставить С++ "жрать больше C#". А как же скриптовые ./configure + make?
В зависимостях QtCore и QtScript. Да оно пожирнее cmake выходит. Опять какой-то умник решил за всех.
>В отличие от qmake, qbs не привязан к QtХм...
$ cd qbs-src-1.8.0
$ find . -type f -name *.cpp | xargs cat | grep QString | wc -l4316
Умник штoле? Он не привязан к Qt в том смысле, что поддержка Qt там сделана средствами самой системы сборки, а не прибита гвоздями к ядру, как в qmake.
> а не прибита гвоздями к ядру, как в 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. Ты хоть читаешь, что сам пишешь?
>> а не прибита гвоздями к ядру, как в qmake.
> Чего там у тебя прибито?Прибито, просто в QMake и прочих Qt-шных сборочных утилитах (moc, rcc, uic и т.п.) необходимые части Qt статически вкомпилируются в бинарники и потому наружу не торчат. Впрочем, там по-другому особо и не получится, т.к. иначе при сборке самого Qt возникала бы проблема курицы и яйца, а с бутстрапом заморачиваться не стали.
В qmake поддержка Qt тоже сделана через .prf файлы
А что в плюсах своих строк нету?
"Не привязана к Qt" - это значит "может быть использована для не-Qt проектов". То есть, сама QBS написана на Qt, но проекты, ее использующие, могут быть совсем не связанными с Qt.
> "Не привязана к Qt" - это значит "может быть использована для не-Qt
> проектов". То есть, сама QBS написана на Qt, но проекты, ее
> использующие, могут быть совсем не связанными с Qt.Ставить Qt для сборки проекта без Qt? Какое-то бредовое применение...
Ставить надо только библиотеки Qt, они и так в 95% случаев стоят на десктопах, даже на пользовательских. Точно так-же если писать код в gedit, то нужно будет поставить GTK, хотя проект может быть написан хоть на ассемблере.
> Ставить надо только библиотеки Qt, они и так в 95% случаев стоят
> на десктопах, даже на пользовательских. Точно так-же если писать код в
> gedit, то нужно будет поставить GTK, хотя проект может быть написан
> хоть на ассемблере.
>в 95% случаев стоят на десктопахЯ тебе открою секрет. Сборка может быть произведена не только на десктопах...
Я тебе открою секрет, Qt есть не только на десктопах
Только вот он нафиг не нужен на сервере.
Qt, внезапно, это не только "окошки". Но тулкитофобы обычно такими мелочами не интересуются.
Я не тулкитофоб, но найди мне хоть одну серверную софтину на Qt. Web-сервер, там, или БД. Скорее уж всякая вебятина найдется на Ruby или php, чем Qt. Тулчейны для сборки тоже ни разу не зависят от Qt, за исключением тех, которые от самого Qt.
Только qtcore, как сказали выше. Не нужно ставить все части, Qt 5 хорошо порезан.
> Только qtcore, как сказали выше. Не нужно ставить все части, Qt 5
> хорошо порезан.Про QtScript ты специально умалчиваешь? И интересно, где там отдельный тарбол для qtcore.
Qt Script deprecated in Qt 5.5.
Внезапно, qmake тоже можно использовать для сборки проектов, не зависящих от Qt.QT -= core, и вперед.
Хорошая штука на самом деле
Перевели на работе на него два небольших Qt-шных проекта c богомерзкого CMake, пока всем нравится
Из плюсов: человекочитаемые билд скрипты, простой как топор - полноценно начать юзать можно за вечер, qt и android из коробки, нормальная система профилей вместо костыльных тулчейнов в cmake.
Минусы: доки хромают, готовься читать исходники; не хватает некоторых фич (например нет аналога cmake-овских FindXXX, только pkgconfig probe или указывать флаги руками если винда); пару раз были глюки с генератором проектов для msvc.
На небольших проектах (~15kloc) по скорости сильной разницы с CMake + Makefiles не было замечено
> по скорости сильной разницы с CMake + Makefiles не было замеченоА с CMake + Ninja? Гененрируемые CMake-ом мейкфайлы -- это треш и угар с хитрой системой вызовов одного из другого и прочими непотребствами.
А с нинзя фанбои qbs обычно не сравнивают, всегда с богомерзким make. Ninja рвет просто qbs в инкрементных билдах - поэтому лично я от него отказался. На мелких проектах меньше 100к SLOC, да, QBS можно поюзать.
> Добавлена начальная поддержка сборки приложений для ОС QNX....
> Обеспечена официальная поддержка сборки приложений для FreeBSD.Похоже, можно только то, что "предусмотрели" авторы. Ну и JavaScript умиляет.
>> Добавлена начальная поддержка сборки приложений для ОС QNX.
> ...
>> Обеспечена официальная поддержка сборки приложений для FreeBSD.
> Похоже, можно только то, что "предусмотрели" авторы. Ну и JavaScript умиляет.Если бы один только жаваскрипт...
JavaScript там без веба.PS Ну были бы там Python, Ruby, сильно быстрее было бы?
> JavaScript там без веба.
> PS Ну были бы там Python, Ruby, сильно быстрее было бы?Было бы не так богомерзко.
>>Похоже, можно только то, что "предусмотрели" авторы. Ну и JavaScript умиляет.Ты не прав, и прав ;) !111
Авторы предусмотрели возможность написания своих модулей.
А как у него с поиском зависимостей? т.е. как устроен поиск сторонних библиотек
Там есть такая фигня как Probe - http://doc.qt.io/qbs/probe-item.html
Ты ее конфигурируеш, пишеш на javascript что и где искать.
Есть небольшой набор проб в поставке - http://code.qt.io/cgit/qt-labs/qbs.git/tree/share/qbs/import...Конкретно для библиотек - http://code.qt.io/cgit/qt-labs/qbs.git/tree/share/qbs/import... - запускает pkg-config, парсит его вывод.
Второй вариант, если один из подпроектов зависит от другого подпроекта - то зависимость указывается через Depends - http://doc.qt.io/qbs/depends-item.html