Название: Qbs 1.15.0 Отправлено: Авварон от Декабрь 20, 2019, 21:12 Кузулис уже писал на хабре (https://habr.com/ru/post/480132/) про фичи для микроконтроллеров, но вот и официальный анонс вышел (https://www.qt.io/blog/qbs-1.15.0-released).
Название: Re: Qbs 1.15.0 Отправлено: kuzulis от Декабрь 22, 2019, 22:05 По ходу это никому не надо :). На опеннете вон, даж заминусовали (лучше там вообще не светиться - обгадят и придется обтекать, а иначе - впитывать).
Название: Re: Qbs 1.15.0 Отправлено: Авварон от Декабрь 22, 2019, 22:34 Ой, на опеннете всегда школота сидела :D
А так, наш форум никому не нужен, а не только Qbs ;) Ты посмотри на остальные темы... Даже про деревянный айтем никто не набрасывает. А так-то, что ты хотел, после похорон Qbs не мог не случиться отток юзеров, но несмотря на это кто-то используется - периодически возникают вопросы в рассылке, да и баг-репорты заводят регулярно когда что-то ломается. Я вот на самом деле две недели трахался с msvc и clang-cl чтобы заработал -fsanitize=address и прямо не могу нарадоваться насколько всё просто и красиво получилось. Шутка ли, 200 строк дифф. У меня правда есть чувство что где-то собака порылась, но Qbs и QtCreator с патчем собираются на ура. Название: Re: Qbs 1.15.0 Отправлено: Авварон от Декабрь 22, 2019, 23:53 Ты, кстати, починил Дискорд?
Название: Re: Qbs 1.15.0 Отправлено: kuzulis от Декабрь 23, 2019, 09:49 Цитировать Ты, кстати, починил Дискорд? Не, я потерял ссылку на "канал". Теперь жду когда кто-нибудь добавит упоминание о ней или в документацию или на вики. Название: Re: Qbs 1.15.0 Отправлено: kambala от Декабрь 23, 2019, 10:45 есть какая-то утилита для конвертации pro в qbs?
https://wiki.qt.io/Qbs_Quick_Reference/ru русская страница содержит больше инфы, чем английская :) Название: Re: Qbs 1.15.0 Отправлено: kuzulis от Декабрь 23, 2019, 12:27 Цитировать есть какая-то утилита для конвертации pro в qbs? Вроде нету. Название: Re: Qbs 1.15.0 Отправлено: Авварон от Декабрь 23, 2019, 14:15 Цитировать Ты, кстати, починил Дискорд? Не, я потерял ссылку на "канал". Теперь жду когда кто-нибудь добавит упоминание о ней или в документацию или на вики. В посте на блоге она есть=) Цитировать We have recently started to use Discord (https://discord.gg/tw5HHyY) in addition to the existing IRC channel #qbs on chat.freenode.net. Feel free to join Название: Re: Qbs 1.15.0 Отправлено: kuzulis от Декабрь 23, 2019, 14:20 Цитировать В посте на блоге она есть=) Ахх, Ёлки, спасибо. Название: Re: Qbs 1.15.0 Отправлено: Авварон от Декабрь 23, 2019, 14:20 есть какая-то утилита для конвертации pro в qbs? https://wiki.qt.io/Qbs_Quick_Reference/ru русская страница содержит больше инфы, чем английская :) Есть аналог qmake -project: Код: qbs create-project Сам не пользовался, за работоспособность не отвечаю Вики я вообще не знаю зачем нужна, она просто скудно дублирует документацию (https://doc.qt.io/qbs/). Все идеи описаны в багтрекере а не в вики, то есть для разработки она тоже не используется. Я бы вообще всю информацию держал в одном месте - в документации. Она хотя бы под тем же версионным контролем, что и код. Название: Re: Qbs 1.15.0 Отправлено: Авварон от Декабрь 23, 2019, 14:21 Цитировать В посте на блоге она есть=) Ахх, Ёлки, спасибо. Но я тебя вижу в списке участников - тебе надо просто зайти под тем же логином/паролем что ты заходил в первый раз (если ты конечно их знаешь) Название: Re: Qbs 1.15.0 Отправлено: kambala от Декабрь 24, 2019, 11:16 Есть аналог qmake -project: работать она работает, но просто собирает все обнаруженные файлы в один qbs верхнего уровня. для простых проектов сойдет, наверное :)Код: qbs create-project Сам не пользовался, за работоспособность не отвечаю попытался руками написать qbs файлы для https://github.com/kambala-decapitator/qt-test-subprojects, пока застрял на header-only либе. app1 зависит от core и header-only, core зависит от header-only: при сборке получаю Цитировать qt-test-subprojects/header-only/header-only.qbs:1:1 First product defined here. как исправить?qt-test-subprojects/header-only/header-only.qbs:1:1 Second product defined here. можно вопросы тут задавать или лучше использовать SO/mailing list? Название: Re: Qbs 1.15.0 Отправлено: Авварон от Декабрь 24, 2019, 11:55 работать она работает, но просто собирает все обнаруженные файлы в один qbs верхнего уровня. для простых проектов сойдет, наверное :) Жаль, могла бы хотя бы по папочкам раскладыватьпопытался руками написать qbs файлы для https://github.com/kambala-decapitator/qt-test-subprojects, пока застрял на header-only либе. app1 зависит от core и header-only, core зависит от header-only: при сборке получаю Проблема в том, что у вас есть два проекта (app1 и core), которые референсят один и тот же проект (header-only). Референсить/включать (по сути, это такой инклюд, только, слава богу, не текстовый, но можно думать о нем и так) один и тот же (под)проект более одного раза нельзя - для подпроекта можно переопределять его дефолтные проперти и если проект подключается с разными пропертями, то неясно, как это обрабатывать (брать первый? второй? брать оба нельзя!)Цитировать qt-test-subprojects/header-only/header-only.qbs:1:1 First product defined here. как исправить?qt-test-subprojects/header-only/header-only.qbs:1:1 Second product defined here. Обычно делают не так - обычно заводят топлевел-проект, который референсит прямые подпапки и так далее по иерархии папок. А реальные зависимости разгребаются через Depends. В qbs структура Продуктов и (более-менее) Модулей "плоская" - они видны для Depends ото всюду, без привязки к исходной иерархии. Объяснение - вы логически зависите от либы "foo", а не от папки src/libs/foo/ которая может быть где угодно (и да, как следствие, двух либ/приложений с одинаковым именем в проекте быть не может) То есть, структура папок отдельно, зависимости отдельно (хотя они частично и параллельны). Просто перенесите Код: references: [ Вообще, реальный Project в проекте, как правило, один - на верхнем уровне. Рекурсивные подпапки (ака TEMPLATE+=subdirs в qmake) тоже делаются через Project, но он такой "фейковый" - не содержит ничего, кроме references ниже (https://github.com/ABBAPOH/qbsfish/blob/master/src/src.qbs) (не пугайтесь SubProject (https://doc.qt.io/qbs/qml-qbslanguageitems-subproject.html), в данном случае он полностью эквивалентен references, просто более "декларативно") Цитировать qt-test-subprojects/header-only/header-only.qbs:1:1 First product defined here. можно вопросы тут задавать или лучше использовать SO/mailing list? В mail листе отвечают достаточно оперативно, насчет SO не знаю. Другое дело что у буржуев щаз праздники и даже коммиты в геррите не ревьювят. Ох уж это время года :) Задавайте пока тут Название: Re: Qbs 1.15.0 Отправлено: kambala от Декабрь 24, 2019, 14:12 большое спасибо, все получилось!
(частично по теме) а как запустить Qt приложение, собранное вне креатора, без модификации rpath? запуск через Код: DYLD_LIBRARY_PATH=/Volumes/hdd/Applications/Qt/5.13.1/clang_64/lib app2.app/Contents/MacOS/app2 Цитировать dyld: Library not loaded: @rpath/QtCore.framework/Versions/5/QtCore Referenced from: .../default/app2.998ffe0d/app2.app/Contents/MacOS/app2 Reason: image not found Название: Re: Qbs 1.15.0 Отправлено: Авварон от Декабрь 24, 2019, 14:19 Там в какой-то макоси появился DYLD_FRAMEWORK_PATH в дополнение к DYLD_LIBRARY_PATH.
У меня так: Код: export DYLD_FRAMEWORK_PATH=/Applications/Qt/5.13.1/clang_64/lib/:`pwd`/default/sharedLib.c0837e29/ Еще есть команда qbs run (https://doc.qt.io/qbs/cli-run.html) которая умеет делать это за вас=) Код: qbs run -p <ваш продукт> Код: mbp-abbapoh:qt-test-subprojects abbapoh$ qbs run -p app2 На мне висит тикет (https://bugreports.qt.io/browse/QBS-1204) это документировать, но я ленюсь Название: Re: Qbs 1.15.0 Отправлено: kambala от Декабрь 24, 2019, 15:02 DYLD_FRAMEWORK_PATH помог, спасибо. я чисто потестить через терминал :)
с qbs run намного лучше! :) Название: Re: Qbs 1.15.0 Отправлено: kambala от Декабрь 24, 2019, 15:39 а как выбрать тип библиотеки-зависимости на лету? хочу, чтоб app1 статически линковалось к core, а app2 — динамически. вот так выдает ошибку:
Код
Цитировать app1/app1.qbs:1:1 Error while handling product 'app1': app1/app1.qbs:1:1 Parameter 'core.isDynamicLib' is not declared. app2/app2.qbs:1:1 Error while handling product 'app2': app2/app2.qbs:1:1 Parameter 'core.isDynamicLib' is not declared. Название: Re: Qbs 1.15.0 Отправлено: Авварон от Декабрь 24, 2019, 15:49 А вот это я вам не подскажу=)
То, как вы делаете, не заведется, параметры в Depends не управляют (как это ни странно) параметрами зависимого продукта/модуля, они нужны, чтобы управлять модулями, от которых сам этот продукт зависит (+1 уровень зависимости). Единственный пример для чего это надо, это чтобы НЕ линковаться к плагинам: Код: Depends { name: "myplugin"; cpp.link: false } Кажется, это можно сделать через мультиплексинг (https://doc.qt.io/qbs/multiplexing.html), но это тема, в которой я не особо шарю. Идея в том чтобы собирать проект в два прохода - один раз для "статического" профиля (https://doc.qt.io/qbs/qml-qbslanguageitems-profile.html) и один для "динамического". Как это сделать и будет ли работать - ума не приложу, никогда не было нужно=) Название: Re: Qbs 1.15.0 Отправлено: Авварон от Декабрь 24, 2019, 15:59 Ой нет, что-то я тупанул, можно же проще сделать - через два продукта
Код: StaticLibrary { Update: Хотя я уверен что придется повозиться с макросами экспорта не венде=( Название: Re: Qbs 1.15.0 Отправлено: kambala от Декабрь 24, 2019, 16:26 ага, я примерно так и сделал: https://github.com/kambala-decapitator/qt-test-subprojects/commit/3976584e86155fda34dea9ac7f11df1a87f551a1. может, через модуль можно как-то красивее оформить, чтобы получилось примерно как в https://doc.qt.io/qbs/howtos.html#how-do-i-make-my-app-build-against-my-library — Choosing Between Dynamic and Statically-built Qt Projects.
да, макросы надо будет сделать аналогично sharedLib. еще обнаружил, что просто изменение type вместо использования DynamicLibrary/StaticLibrary не упаковывает либы во фреймворки на Макос :) когда пытался подобное сделать через qmake, получилось как-то слишком громоздко... P.S. опечатки нашел в доках :) 1. https://doc.qt.io/qbs/qml-qbsconvenienceitems-qtapplication.html — лишняя } в Depends 2. https://doc.qt.io/qbs/overview.html#build-process — скобки перепутаны везде внутри Rule (второй кусок кода) Название: Re: Qbs 1.15.0 Отправлено: Авварон от Декабрь 24, 2019, 18:45 ага, я примерно так и сделал: https://github.com/kambala-decapitator/qt-test-subprojects/commit/3976584e86155fda34dea9ac7f11df1a87f551a1. может, через модуль можно как-то красивее оформить, чтобы получилось примерно как в https://doc.qt.io/qbs/howtos.html#how-do-i-make-my-app-build-against-my-library — Choosing Between Dynamic and Statically-built Qt Projects. да, макросы надо будет сделать аналогично sharedLib. Я боюсь вендопроблем, ведь макросы экспорта должны быть пустыми в static либе и непустыми в shared. Возможно, единственный способ собирать дважды с разными макросами соответственно. Вендопроблемы=( еще обнаружил, что просто изменение type вместо использования DynamicLibrary/StaticLibrary не упаковывает либы во фреймворки на Макос :) Что в Qbs удобно, это всегда можно посмотреть что и как сделано Код: $ cat "/Applications/Qt/Qt Creator.app/Contents/Resources/qbs/share/qbs/imports/qbs/base/NativeBinary.qbs" P.S. опечатки нашел в доках :) 1. https://doc.qt.io/qbs/qml-qbsconvenienceitems-qtapplication.html — лишняя } в Depends 2. https://doc.qt.io/qbs/overview.html#build-process — скобки перепутаны везде внутри Rule (второй кусок кода) Спасибо, поправил (https://codereview.qt-project.org/c/qbs/qbs/+/285298) Название: Re: Qbs 1.15.0 Отправлено: kambala от Декабрь 24, 2019, 21:42 переделал на StaticLibrary/DynamicLibrary как выше — все-таки правильнее будет.
наткнулся на спорный момент в документации: https://doc.qt.io/qbs/qml-qbslanguageitems-export.html утверждает Цитировать This relationship is transitive, so a product C depending on product B will also get the include paths and preprocessor macros via A's Export item. то есть при цепочке StaticLibrary -> DynamicLibrary -> App2 хедеры StaticLibrary должны быть видны в App2, т.к. в StaticLibrary прописаноКод: Export { Код: qt-test-subprojects/app2/main.cpp:6:10: fatal error: 'core.h' file not found Название: Re: Qbs 1.15.0 Отправлено: Авварон от Декабрь 24, 2019, 22:05 Мне кажется, для этого там должно быть
Код: Product { Само по себе оно вроде не экспортирует зависимость от А. Этой строке в документации 6 лет, скоро в школу пойдет, так что оно могло поменяться - ведь если вы зависите от QtCore и QtXml но наружу торчит только QtCore, то нет смысла экспортировать всё подряд. Название: Re: Qbs 1.15.0 Отправлено: kambala от Декабрь 25, 2019, 13:32 спасибо. значит, просто документация не обновлена.
нашел трюк получше как в «производном классе» выбирать тип библиотеки: «базовый класс» наследовать не от Product, а от NativeBinary, тогда доступна упаковка в бандл из коробки, а функционал из Library и *Library не особо-то и нужен (install не планирую). это баг или фича, что список в https://doc.qt.io/qbs/qbsconvenienceitems-qmlmodule.html и https://github.com/qbs/qbs/tree/master/share/qbs/imports/qbs/base отличается? во всяком случае, недокументированный NativeBinary можно спокойно использовать. Название: Re: Qbs 1.15.0 Отправлено: Авварон от Декабрь 25, 2019, 16:23 спасибо. значит, просто документация не обновлена. Я на всякий спросил в чатике в дискорде на предмет того правда ли это, если нет, исправим. нашел трюк получше как в «производном классе» выбирать тип библиотеки: «базовый класс» наследовать не от Product, а от NativeBinary, тогда доступна упаковка в бандл из коробки, а функционал из Library и *Library не особо-то и нужен (install не планирую). это баг или фича, что список в https://doc.qt.io/qbs/qbsconvenienceitems-qmlmodule.html и https://github.com/qbs/qbs/tree/master/share/qbs/imports/qbs/base отличается? во всяком случае, недокументированный NativeBinary можно спокойно использовать. Что-то баг, что-то фича. Я бы описал недостающее но понятия не имею как использовать NSISSetup, NetModule, NodeJSApplication и некоторые другие. Часть айтемов (NativeBinary, Library) являются чисто деталями имплементации и не предполагаются для использования напрямую (и потому не документированы). В простых случаях вы используете верхнеуровневые айтемы, в сложных - наследуете Продукт напрямую. Например, если ваш юз-кейз чуть усложнить - то есть разрешить собирать не только статик/динамик, а статик/динамик/фреймворк, то нативного бинаря уже не достаточно, придется делать MyLibrary (https://github.com/ABBAPOH/qbsfish/blob/master/qbs/imports/MyLibrary.qbs#L10) Насчет установки - в философии Qbs это считается (но не является) обязательным - запуск (по-хорошему) должен осуществляться только из установочной директории (например, install-root внутри директории сборки - по дефолту оно во время сборки (!) ставит в `pwd`/<config>/install-root/<install prefix>). Это сделано для того, чтобы частично (или полностью) избежать вышеназванных проблем с DYLD_FRAMEWORK_PATH и/или двойным набором переменных в файлах проекта - install dir и destination dir и/или проверками в коде - мы запущены из установочной директории? мы запущены из сборки?. Так как вам и так и так придется (в реальном проекте) это все куда-то ставить, так почему не делать это сразу?=) В вашем примере если бы либа была установлена и прописан правильно rpath, не пришлось бы указывать путь в DYLD_FRAMEWORK_PATH, только достаточно указать путь к Qt. Впрочем, ставить либы Qt никто не запрещает и сама qbs так делает (https://github.com/qbs/qbs/blob/master/src/shared/bundledqt/bundledqt.qbs) Название: Re: Qbs 1.15.0 Отправлено: kambala от Декабрь 25, 2019, 23:29 спасибо, значит, NativeBinary специально недокументирован и лучше его не использовать.
насколько я понимаю, тогда не получится выставить правильные макросы для винды при вашем предложенном подходе заворачивания StaticLibrary в DynamicLibrary, т.к. в этом случае не осуществляется пересборки с новыми флагами. Во всяком случае, я не вижу -DCORE_LIBRARY в логе сборки https://github.com/kambala-decapitator/qt-test-subprojects/commit/547ddf4f67cba5303f91d4ef9480a8761b588140. И остаются подходы через установку type или использование MyLibrary. Или как-то можно «заинлайнить» все нужные свойства внутрь StaticLibrary и DynamicLibrary (чтоб не копипастить), но без наследования от Product? Group позволяет только файлы группировать, больше я возможностей не нашел... Название: Re: Qbs 1.15.0 Отправлено: Авварон от Декабрь 26, 2019, 03:02 Ваш способ с наследованием от NativeBinary вполне себе ок, это самое простое, что можно сделать.
То, что он "приватный" - ничего страшного, вряд ли он куда-то денется. Я, кстати, проверил транзитивность зависимостей - пример действительно конфузящий. 1. Если есть цепочка Depends A <- B <- C <- app 2. А экспортирует инклюды, B экспортирует зависимость от А + свои инклюды, С экспортирует зависимость от B + свои инклюды 3. Тогда в app видно инклюды из A Если убрать экспорт А из B или B из С, тогда инклюды не видно. То есть экспорты, конечно, транзитивны, но не автоматически транзитивны. Пример во вложении. Название: Re: Qbs 1.15.0 Отправлено: kambala от Декабрь 26, 2019, 12:19 спасибо большое за помощь! вернул NativeBinary.
документацию надо будет подправить про транзитивность экспортов :) и пока последний вопрос :) правильно ли делать хедерные либы Product? как здесь https://github.com/kambala-decapitator/qt-test-subprojects/blob/master/header-only/header-only.qbs Название: Re: Qbs 1.15.0 Отправлено: Авварон от Декабрь 26, 2019, 12:47 и пока последний вопрос :) правильно ли делать хедерные либы Product? как здесь https://github.com/kambala-decapitator/qt-test-subprojects/blob/master/header-only/header-only.qbs Да, я бы делал так же (https://github.com/ABBAPOH/qbs/blob/constexpr/src/shared/gsl/gsl.qbs). Продукт вообще базовая вещь для всего |