Russian Qt Forum

Qt => Qt-инструментарий => Тема начата: __Heaven__ от Декабрь 25, 2016, 00:00



Название: qbs как начать
Отправлено: __Heaven__ от Декабрь 25, 2016, 00:00
Привет всем?
Подскажите, как создать виджетовый проект и настроить креатор на запуск с отладкой?


Название: Re: qbs как начать
Отправлено: __Heaven__ от Декабрь 25, 2016, 12:35
Больше всего смущает, что необходимо указывать путь к файлу запуска.


Название: Re: qbs как начать
Отправлено: ViTech от Декабрь 25, 2016, 13:43
Простейший пример проекта - во вложении.


Название: Re: qbs как начать
Отправлено: __Heaven__ от Декабрь 25, 2016, 23:30
Не нужно ли здесь в зависимость cpp добавить? У меня ошибка
error: 'cstddef' file not found
#  include <cstddef>
           ^


Название: Re: qbs как начать
Отправлено: __Heaven__ от Декабрь 26, 2016, 10:17
Под виндой ошибок оказалось на порядок больше.
Цитировать
10:15:02: Running steps for project QbsGuiExample...
compiling main.cpp
compiling MainWindow.cpp
compiling moc_MainWindow.cpp
compiling moc_MainWindow.cpp
linking QbsGuiExample.exe
C:/Development/mingw64/bin/g++.exe "-Wl,--unresolved-symbols=ignore-in-shared-libs" "-Wl,--major-subsystem-version,5" "-Wl,--minor-subsystem-version,02" "-Wl,--major-os-version,5" "-Wl,--minor-os-version,02" -LC:/Qt/Qt5.7.1_mingw64/lib -m64 -o D:/QtProjects/QbsGuiExample/build/QbsGuiExample-Desktop_Qt_5_7_1_MinGW_64bit-Debug/qtc_Desktop__135af0bf-debug/QbsGuiExample.qtc-Desktop--135af0bf.348d7c97/QbsGuiExample.exe D:/QtProjects/QbsGuiExample/build/QbsGuiExample-Desktop_Qt_5_7_1_MinGW_64bit-Debug/qtc_Desktop__135af0bf-debug/QbsGuiExample.qtc-Desktop--135af0bf.348d7c97/.obj/24bb1e2f24d83fc9/MainWindow.cpp.o D:/QtProjects/QbsGuiExample/build/QbsGuiExample-Desktop_Qt_5_7_1_MinGW_64bit-Debug/qtc_Desktop__135af0bf-debug/QbsGuiExample.qtc-Desktop--135af0bf.348d7c97/.obj/3a52ce780950d4d9/main.cpp.o D:/QtProjects/QbsGuiExample/build/QbsGuiExample-Desktop_Qt_5_7_1_MinGW_64bit-Debug/qtc_Desktop__135af0bf-debug/QbsGuiExample.qtc-Desktop--135af0bf.348d7c97/.obj/980dda0d6c4673fc/moc_MainWindow.cpp.o D:/QtProjects/QbsGuiExample/build/QbsGuiExample-Desktop_Qt_5_7_1_MinGW_64bit-Debug/qtc_Desktop__135af0bf-debug/QbsGuiExample.qtc-Desktop--135af0bf.348d7c97/.obj/bb26bfbee497bb69/moc_MainWindow.cpp.o C:/Qt/Qt5.7.1_mingw64/lib/libqtmaind.a C:/Qt/Qt5.7.1_mingw64/lib/libQt5Cored.a C:/Qt/Qt5.7.1_mingw64/lib/libQt5Guid.a C:/Qt/Qt5.7.1_mingw64/lib/libQt5Widgetsd.a
D:/QtProjects/QbsGuiExample/build/QbsGuiExample-Desktop_Qt_5_7_1_MinGW_64bit-Debug/qtc_Desktop__135af0bf-debug/QbsGuiExample.qtc-Desktop--135af0bf.348d7c97/.obj/bb26bfbee497bb69/moc_MainWindow.cpp.o: In function `qt_noop()':
D:/QtProjects/QbsGuiExample/build/QbsGuiExample-Desktop_Qt_5_7_1_MinGW_64bit-Debug/qtc_Desktop__135af0bf-debug/QbsGuiExample.qtc-Desktop--135af0bf.348d7c97/qt.headers/moc_MainWindow.cpp:56: multiple definition of `MainWindow::qt_static_metacall(QObject*, QMetaObject::Call, int, void**)'
D:/QtProjects/QbsGuiExample/build/QbsGuiExample-Desktop_Qt_5_7_1_MinGW_64bit-Debug/qtc_Desktop__135af0bf-debug/QbsGuiExample.qtc-Desktop--135af0bf.348d7c97/.obj/980dda0d6c4673fc/moc_MainWindow.cpp.o:D:/QtProjects/QbsGuiExample/build/QbsGuiExample-Desktop_Qt_5_7_0_MinGW_64bit-Debug/qtc_Desktop__7fd0dfa4-debug/QbsGuiExample.qtc-Desktop--7fd0dfa4.43623f43/qt.headers/moc_MainWindow.cpp:56: first defined here
D:/QtProjects/QbsGuiExample/build/QbsGuiExample-Desktop_Qt_5_7_1_MinGW_64bit-Debug/qtc_Desktop__135af0bf-debug/QbsGuiExample.qtc-Desktop--135af0bf.348d7c97/.obj/bb26bfbee497bb69/moc_MainWindow.cpp.o: In function `QScopedPointer<QObjectData, QScopedPointerDeleter<QObjectData> >::operator->() const':
D:/QtProjects/QbsGuiExample/build/QbsGuiExample-Desktop_Qt_5_7_1_MinGW_64bit-Debug/qtc_Desktop__135af0bf-debug/QbsGuiExample.qtc-Desktop--135af0bf.348d7c97/qt.headers/moc_MainWindow.cpp:70: multiple definition of `MainWindow::metaObject() const'
D:/QtProjects/QbsGuiExample/build/QbsGuiExample-Desktop_Qt_5_7_1_MinGW_64bit-Debug/qtc_Desktop__135af0bf-debug/QbsGuiExample.qtc-Desktop--135af0bf.348d7c97/.obj/980dda0d6c4673fc/moc_MainWindow.cpp.o:D:/QtProjects/QbsGuiExample/build/QbsGuiExample-Desktop_Qt_5_7_0_MinGW_64bit-Debug/qtc_Desktop__7fd0dfa4-debug/QbsGuiExample.qtc-Desktop--7fd0dfa4.43623f43/qt.headers/moc_MainWindow.cpp:70: first defined here
D:/QtProjects/QbsGuiExample/build/QbsGuiExample-Desktop_Qt_5_7_1_MinGW_64bit-Debug/qtc_Desktop__135af0bf-debug/QbsGuiExample.qtc-Desktop--135af0bf.348d7c97/.obj/bb26bfbee497bb69/moc_MainWindow.cpp.o: In function `MainWindow::qt_metacast(char const*)':
D:/QtProjects/QbsGuiExample/build/QbsGuiExample-Desktop_Qt_5_7_1_MinGW_64bit-Debug/qtc_Desktop__135af0bf-debug/QbsGuiExample.qtc-Desktop--135af0bf.348d7c97/qt.headers/moc_MainWindow.cpp:75: multiple definition of `MainWindow::qt_metacast(char const*)'
D:/QtProjects/QbsGuiExample/build/QbsGuiExample-Desktop_Qt_5_7_1_MinGW_64bit-Debug/qtc_Desktop__135af0bf-debug/QbsGuiExample.qtc-Desktop--135af0bf.348d7c97/.obj/980dda0d6c4673fc/moc_MainWindow.cpp.o:D:/QtProjects/QbsGuiExample/build/QbsGuiExample-Desktop_Qt_5_7_0_MinGW_64bit-Debug/qtc_Desktop__7fd0dfa4-debug/QbsGuiExample.qtc-Desktop--7fd0dfa4.43623f43/qt.headers/moc_MainWindow.cpp:75: first defined here
D:/QtProjects/QbsGuiExample/build/QbsGuiExample-Desktop_Qt_5_7_1_MinGW_64bit-Debug/qtc_Desktop__135af0bf-debug/QbsGuiExample.qtc-Desktop--135af0bf.348d7c97/.obj/bb26bfbee497bb69/moc_MainWindow.cpp.o: In function `MainWindow::qt_metacall(QMetaObject::Call, int, void**)':
D:/QtProjects/QbsGuiExample/build/QbsGuiExample-Desktop_Qt_5_7_1_MinGW_64bit-Debug/qtc_Desktop__135af0bf-debug/QbsGuiExample.qtc-Desktop--135af0bf.348d7c97/qt.headers/moc_MainWindow.cpp:83: multiple definition of `MainWindow::qt_metacall(QMetaObject::Call, int, void**)'
D:/QtProjects/QbsGuiExample/build/QbsGuiExample-Desktop_Qt_5_7_1_MinGW_64bit-Debug/qtc_Desktop__135af0bf-debug/QbsGuiExample.qtc-Desktop--135af0bf.348d7c97/.obj/980dda0d6c4673fc/moc_MainWindow.cpp.o:D:/QtProjects/QbsGuiExample/build/QbsGuiExample-Desktop_Qt_5_7_0_MinGW_64bit-Debug/qtc_Desktop__7fd0dfa4-debug/QbsGuiExample.qtc-Desktop--7fd0dfa4.43623f43/qt.headers/moc_MainWindow.cpp:83: first defined here
D:/QtProjects/QbsGuiExample/build/QbsGuiExample-Desktop_Qt_5_7_1_MinGW_64bit-Debug/qtc_Desktop__135af0bf-debug/QbsGuiExample.qtc-Desktop--135af0bf.348d7c97/.obj/bb26bfbee497bb69/moc_MainWindow.cpp.o: In function `qt_noop()':
D:/QtProjects/QbsGuiExample/build/QbsGuiExample-Desktop_Qt_5_7_1_MinGW_64bit-Debug/qtc_Desktop__135af0bf-debug/QbsGuiExample.qtc-Desktop--135af0bf.348d7c97/qt.headers/moc_MainWindow.cpp:56: multiple definition of `MainWindow::staticMetaObject'
D:/QtProjects/QbsGuiExample/build/QbsGuiExample-Desktop_Qt_5_7_1_MinGW_64bit-Debug/qtc_Desktop__135af0bf-debug/QbsGuiExample.qtc-Desktop--135af0bf.348d7c97/.obj/980dda0d6c4673fc/moc_MainWindow.cpp.o:D:/QtProjects/QbsGuiExample/build/QbsGuiExample-Desktop_Qt_5_7_0_MinGW_64bit-Debug/qtc_Desktop__7fd0dfa4-debug/QbsGuiExample.qtc-Desktop--7fd0dfa4.43623f43/qt.headers/moc_MainWindow.cpp:56: first defined here
collect2.exe: error: ld returned 1 exit status
Process failed with exit code 1.
The following products could not be built for configuration qtc_Desktop__135af0bf-debug:
   QbsGuiExample
Error while building/deploying project QbsGuiExample (kit: Desktop Qt 5.7.1 MinGW_64bit)
When executing step "Qbs Build"
10:15:04: Elapsed time: 00:03.


Название: Re: qbs как начать
Отправлено: kuzulis от Декабрь 26, 2016, 10:30
Цитировать
Не нужно ли здесь в зависимость cpp добавить?

Нет.

Скорее всего что-то криво с QtC && QBS конфигурацией. Для простоты можете взять примеры из qbs/examples (скачать сорцы QBS) и попробовать собрать (например examples/helloworld-qt, examples/helloworld-minimal).

UPD: У меня все собралось (Kit MSVC 2015 && Qt 5.7.1)
UPD2: Хотя, если честно, приаттаченый пример замороченный и уж явно не тянет на "простой" :).


Название: Re: qbs как начать
Отправлено: ViTech от Декабрь 26, 2016, 10:55
Не нужно ли здесь в зависимость cpp добавить? У меня ошибка
error: 'cstddef' file not found
#  include <cstddef>
           ^
...

Под виндой ошибок оказалось на порядок больше.
...

Похоже, что toolchain не лучшим образом сконфигурировался (http://doc.qt.io/qbs/configuring.html).


Название: Re: qbs как начать
Отправлено: __Heaven__ от Декабрь 26, 2016, 12:22
Не понятно, как согласовать настройки qbs и qtcreator
Я в cmd добавил в path путь к компилю и qt (bin)
Запустил
Код:
qbs setup-toolchains --detect
Получил профиль x86_64-w64-mingw32.
В QtCreator этот профиль не появился. Причём настроен Kit с использованием тех же компилятора и библиотеки.


Название: Re: qbs как начать
Отправлено: __Heaven__ от Декабрь 26, 2016, 13:11
Почистил папку билда. Всё заработало. Спасибо.


Название: Re: qbs как начать
Отправлено: ViTech от Декабрь 26, 2016, 13:13
Настройки Qbs для Creator хранятся в его папке конфигураций (в винде где-то в C:\Users\Xxx\AppData\Roaming\QtProject\qtcreator\). Там папка "qbs" с профилями и qbs.conf. Это всё можно удалить, при запуске Creator заново их создаёт.


Название: Re: qbs как начать
Отправлено: __Heaven__ от Декабрь 26, 2016, 13:20
Да, так и делал. Потом снял галку Store profiles in Qt Creator settings dirrectory.
Настройки полетели в C:\Users\USERNAME\AppData\Roaming\QtProject\qbs\1.7.0

kuzulis, спасибо, гляну примеры


Название: Re: qbs как начать
Отправлено: __Heaven__ от Декабрь 26, 2016, 13:29
Смотрю примеры....
Чем-то отличается использование апострофа от кавычек?


Название: Re: qbs как начать
Отправлено: ViTech от Декабрь 26, 2016, 13:43
Чем-то отличается использование апострофа от кавычек?

Скорей всего там правила javascript применяются.


Название: Re: qbs как начать
Отправлено: __Heaven__ от Декабрь 26, 2016, 14:12
Скорей всего там правила javascript применяются.
Если честно, я с ними не знаком.

Хотелось бы ещё уточнить, как мне управлять путями к сторонним библиотекам на винде? Ведь на каждой машине они могут располагаться как удобно пользователю. Как использовать prf файлы, например для подключения qwt?


Название: Re: qbs как начать
Отправлено: kuzulis от Декабрь 26, 2016, 15:39
Цитировать
Хотелось бы ещё уточнить, как мне управлять путями к сторонним библиотекам на винде? Ведь на каждой машине они могут располагаться как удобно пользователю. Как использовать prf файлы, например для подключения qwt?

Так же как и в qmake - никак. Можно писать Probe для поиска мест с нужными хидерами/либами. Можно каждый раз ручками править пути.

PS: Мы, например, таскаем qwt в проекте (под виндой), сделав QBS-ную обертку для его сборки.



Название: Re: qbs как начать
Отправлено: __Heaven__ от Декабрь 26, 2016, 15:47
Так же как и в qmake - никак.
Сам не пробовал, но, вроде, "как".
Цитировать
Adding Qwt as qmake feature

When using the qmake feature mechanism you can bind a special version of qmake to a special installation of Qwt without having to add this dependency to the application project. How to add Qwt as feature is documented in the qmake docs.

After adding Qwt as a feature f.e on Linux as a persistent property ....

qmake -set QMAKEFEATURES ${QWT_ROOT}/features
.. the following line can be added to the application project file:

CONFIG += qwt

PS: Мы, например, таскаем qwt в проекте (под виндой), сделав QBS-ную обертку для его сборки.
Тоже рассматривал этот вариант. Как там со временем сборки проекта и ребилдами?


Название: Re: qbs как начать
Отправлено: kuzulis от Декабрь 26, 2016, 16:55
Цитировать
Как там со временем сборки проекта и ребилдами?

Нормуль, один раз собрал и все... :)


Название: Re: qbs как начать
Отправлено: __Heaven__ от Декабрь 26, 2016, 17:20
Цитировать
Как там со временем сборки проекта и ребилдами?

Нормуль, один раз собрал и все... :)
Перфекционизм не даёт покоя :)
При ребилдах же будет заново пересобираться qwt, верно? Или в qbs предусмотрено правило (возможность реализации) не тратить время на пересборку сторонних либ?
И если вдруг я имею 3 проекта с qwt, то собирай трижды?
Дело в том, что у меня мелкие проектики, которые требуют qwt. Я заколебусь билдить либу :)
А эти Probe, что они из себя представляют? Документация мне не дала ответов. Почему их не используете?


Название: Re: qbs как начать
Отправлено: kuzulis от Декабрь 26, 2016, 19:28
Цитировать
При ребилдах же будет заново пересобираться qwt, верно?

Смотря как настроить проект. Там можно продукту установить свойство builtByDefault чтобы он не пересобирался автоматически, а пересобирался только тогда, когда по нему принудительно кликнуть в дереве проекта QtC.

Цитировать
Или в qbs предусмотрено правило (возможность реализации) не тратить время на пересборку сторонних либ?

Эммм.. тут я не понял... Можно таскать бинарик библиотеки вместе с проектом, обернув его так, чтобы можно было его указывать в Depends.

Цитировать
И если вдруг я имею 3 проекта с qwt, то собирай трижды?

Ну, тут тогда только в каждом проекте подключать qwt ручками, через cpp.dynamicLibraries/includePaths. Другого пути я не знаю.

Цитировать
А эти Probe, что они из себя представляют? Документация мне не дала ответов. Почему их не используете?

Потому что они как-бы больше ориентированы на Linux, IMHO.

Вот, если бы Qwt имела инсталлятор, который что-нибудь прописывал бы в реестре, то можно было бы накалякать модуль автоопределения библиотеки qwt и пр.
Но, т.к. в Windows нет четких требований к положению библиотек и прочего, то придется извращаться...
И, к сожалению, в QBS нету ничего похожего на:
Цитировать
qmake -set QMAKEFEATURES ${QWT_ROOT}/features
Значит оно и не нужно было... или недодумали.. можно им в список рассылки написать или в трекер.. с таким предложением..


Название: Re: qbs как начать
Отправлено: __Heaven__ от Декабрь 27, 2016, 09:14
kuzulis, а что если создать свой модуль qwt?

Цитировать
Making Custom Modules and Items Available Across Projects

What if your modules and items are generally useful and you want to access them in several projects? In this case, it's best to add the location to your preferences. For example:

Код:
qbs config preferences.qbsSearchPaths /usr/local/share/custom-qbs-extensions


Название: Re: qbs как начать
Отправлено: kuzulis от Декабрь 27, 2016, 13:07
Эммм... модуль это не библиотека... это нечто иное, для других целей.


Название: Re: qbs как начать
Отправлено: __Heaven__ от Декабрь 27, 2016, 13:18
Когда я в зависимости пишу cpp, то подключаю модуль для работы с c++. При указании в зависимостях Qt.core подключаю библиотеку и инклюды (как минимум) ядра qt. Разве нельзя сделать модуль для qwt, чтобы тот аналогично Qt.core работал? Или я чего-то не понимаю?


Название: Re: qbs как начать
Отправлено: ViTech от Декабрь 27, 2016, 14:43
В qbsSearchPaths добавляются пути для поиска модулей и прочих штук именно Qbs. Можете попробовать написать модуль для Qwt, аналогично например модулю Qt.Widgets. Но основная проблема, насколько я понимаю, в том, что в этом модуле нужно указывать конкретные пути к файлам библиотеки. А где эти файлы находятся, в общем случае не известно.

Хотелось бы ещё уточнить, как мне управлять путями к сторонним библиотекам на винде? Ведь на каждой машине они могут располагаться как удобно пользователю. Как использовать prf файлы, например для подключения qwt?


Название: Re: qbs как начать
Отправлено: kuzulis от Декабрь 27, 2016, 14:46
Т.е. хочешь сделать как-то так:

1. Есть где-то бинари (как dll, так и lib) уже собранной Qwt (например,  на E:\qwt\lib).
2. Есть где-то хидеры от Qwt (например,  на E:\qwt\inc).
3. Хочешь добавить туда qbs-сный модуль (например, в E:\qwt\modules\qwt). В этом модуле будут "жестко" прописаны пути к Qwt-шным либам и хидерам (для cpp.dynamicLibraries/includePaths и прочих).

4. Создаешь где-то свой проект "Hello World" и добавляешь там Depends { name: "qwt" }.
5. При настройке QBS передаешь ей путь к модулю qwt:
Цитировать
qbs config preferences.qbsSearchPaths E:\qwt

6. Пользуешься ништяками... Т.к. теперб любой созданный проект автоматом будет знать где Qwt при использовании Depends { name: "qwt" }... Хм... в этом есть смысл...

Я правильно понял?

Если ДА - то я не пробовал это. Попробуй и расскажи.. :)


Название: Re: qbs как начать
Отправлено: __Heaven__ от Декабрь 27, 2016, 14:53
Всё так и хочу :)
А ещё для каждого компиля свои пути :)
Пускай каждый пользователь либы на винде создаёт такой модуль со своими путями.
По сути, штатный prf в qwt занимается этим же (жёстко прописывает пути) но без учёта компиля, вроде как.


Название: Re: qbs как начать
Отправлено: kuzulis от Декабрь 27, 2016, 14:58
Цитировать
Пускай каждый пользователь либы на винде создаёт такой модуль со своими путями.

Брр.. Ок. но я не понимаю, зачем это пользователю? Это ж только для девелопера.

В таком случае проще "пользователю" ничего не создавать, а "тупо" подправить самому в проекте пути к либам Qwt для cpp.dynamicLibraries/includePaths. Зачем ему еще заморачиваться с модулями и прочим? :)

PS: Я бы просто таскал Qwt с собой в проекте (или как сорцы или как бинари), чтоб жмакнул - и сразу собрал :) .


Название: Re: qbs как начать
Отправлено: __Heaven__ от Декабрь 27, 2016, 15:08
"пользователь либы" имел в виду девелопера, который её использует

PS: Я бы просто таскал Qwt с собой в проекте (или как сорцы или как бинари), чтоб жмакнул - и сразу собрал :) .
В принципе, можно, но мой перфекционизм не позволяет этого сделать по причине того, что я могу мобирать как mingw, так и msvc и в разных битностях. Не хочется 4 вида либы таскать да и идеологически как-то не правильно, что в репозитории какой-то бинарь либы с открытым кодом.


Название: Re: qbs как начать
Отправлено: kamre от Декабрь 27, 2016, 16:46
Вот мне тоже интересно было бы узнать про то, как "начать с qbs".

В проекте используются такие библиотеки как boost/gtest/VTK/OpenCV/Qt. Сейчас для сборки используется CMake, позволяет более или менее автоматизированно находить эти библиотеки с нужными модулями внутри них. В Linux библиотеки ставятся из репозиториев и CMake сам их находит. В Windows приходится самому собирать эти библиотеки в архив (под нужный компилятор с нужной разрядностью и нужным набором модулей в библиотеках). В CMake под Windows приходится указывать prefix (путь до места распаковки нужного архива с библиотеками), далее все нужные вещи CMake подцепляет автоматически. Файлы CMake для подключения этих библиотек предоставляются самим CMake или уже есть в самих библиотеках.

Хотелось бы понять как в qbs подключаются эти библиотеки к проекту. Важным моментом еще является то, что эти библиотеки разбиты на модули и далеко не все модули нужны приложению. В CMake при подключении библиотеки можно указывать какие именно модули нужны. Как такое разбиение подключаемых библиотек на модули реализуется в qbs?

И еще вопрос: можно ли уже сгенерировать MSVC solution из qbs проекта и заниматься разработкой в MSVC?


Название: Re: qbs как начать
Отправлено: __Heaven__ от Декабрь 27, 2016, 18:17
С qwt под линуксой тоже что-то было не просто :) В убунтах она как положено qwt именуется, а в джентах qwt6-qt5 или как-то так.


Название: Re: qbs как начать
Отправлено: ViTech от Декабрь 28, 2016, 13:21
Вот мне тоже интересно было бы узнать про то, как "начать с qbs".

В проекте используются такие библиотеки как boost/gtest/VTK/OpenCV/Qt. Сейчас для сборки используется CMake, позволяет более или менее автоматизированно находить эти библиотеки с нужными модулями внутри них. В Linux библиотеки ставятся из репозиториев и CMake сам их находит. В Windows приходится самому собирать эти библиотеки в архив (под нужный компилятор с нужной разрядностью и нужным набором модулей в библиотеках). В CMake под Windows приходится указывать prefix (путь до места распаковки нужного архива с библиотеками), далее все нужные вещи CMake подцепляет автоматически. Файлы CMake для подключения этих библиотек предоставляются самим CMake или уже есть в самих библиотеках.

Хотелось бы понять как в qbs подключаются эти библиотеки к проекту. Важным моментом еще является то, что эти библиотеки разбиты на модули и далеко не все модули нужны приложению. В CMake при подключении библиотеки можно указывать какие именно модули нужны. Как такое разбиение подключаемых библиотек на модули реализуется в qbs?

Скорей всего для этих библиотек придётся писать проектные файлы Qbs, в том или ином виде. Разбиение библиотек на модули можно подсмотреть а примере модулей Qt.

И еще вопрос: можно ли уже сгенерировать MSVC solution из qbs проекта и заниматься разработкой в MSVC?

Документации по Qbs пока маловато. Для интеграции с MSVC можете посмотреть Qt Visual Studio Tools (http://blog.qt.io/blog/2016/11/11/qt-visual-studio-tools-2-0-released/) и Support for generating IDE project files (https://bugreports.qt.io/browse/QBS-31).


Название: Re: qbs как начать
Отправлено: __Heaven__ от Декабрь 28, 2016, 15:04
Попробовал создать модуль для библиотеки. Его подключение происходит успешно при указании пути к нему непосредственно в проекте
Код
Javascript
import qbs
 
Project {
   qbsSearchPaths: "C:/Development/my-qbs-extensions"
   ....
}
 
Модуль считывается из C:\Development\my-qbs-extensions\modules
При попытке убрать указанное свойство и скопировать модуль в профиль (C:\Users\username\AppData\Roaming\QtProject\qtcreator\qbs\1.7.0\profiles\qtc_Desktop__135af0bf\modules), где уже лежит Qt происходит ошибка, то есть, модуль не найден.
Быть может как-то можно через этап сборки задавать qbsSearchPaths ?


Название: Re: qbs как начать
Отправлено: __Heaven__ от Декабрь 28, 2016, 15:17
Ой. Запутался в дирректориях.
В общем, работает всё при копировании модуля в папку с профилем.


Название: Re: qbs как начать
Отправлено: __Heaven__ от Декабрь 28, 2016, 15:21
Остаётся неудобство в том, что при обновлении qbs придётся перекидывать модули в новые папки профилей.


Название: Re: qbs как начать
Отправлено: ViTech от Декабрь 28, 2016, 15:51
При запуске qbs в параметре "--settings-dir" можно указать путь, где хранится конфигурация qbs и с которой выполняется работа. Собственно, QtCreator так и делает. Добавить общий путь qbsSearchPaths можно командой (http://doc.qt.io/qbs/custom-modules.html#making-custom-modules-and-items-available-across-projects). В этом "settings-dir" есть файл qbs.conf, в котором, как я понимаю, описываются основные настройки. Чтобы не возиться с командами, его можно и руками изменить:

Код:
[org]
qt-project\qbs\preferences\qbsSearchPaths=C:/Development/my-qbs-extensions
...

И тогда собственные модули могут постоянно в одном месте храниться, никуда их копировать не придётся.


Название: Re: qbs как начать
Отправлено: __Heaven__ от Декабрь 28, 2016, 17:10
Добавить общий путь можно и в настройках QtCreator/вкладка qbs, значение preferences.qbsSearchPaths. Но тогда теряются модули Qt, в связи с чем в список необходимо ещё добавлять и прежнюю папку с профилем.

Кажется нельзя заставить QtCreator вызывать qbs со своим --settings-dir


Название: Re: qbs как начать
Отправлено: ViTech от Декабрь 28, 2016, 18:37
Добавить общий путь можно и в настройках QtCreator/вкладка qbs, значение preferences.qbsSearchPaths. Но тогда теряются модули Qt, в связи с чем в список необходимо ещё добавлять и прежнюю папку с профилем.

Похоже в этом случае qbsSearchPaths добавляется для конкретного профиля, а не для общих настроек qbs в этом settings-dir.


Название: Re: qbs как начать
Отправлено: Авварон от Декабрь 29, 2016, 11:39
А зачем класть модули в общее место, если можно положить прямо в проект и сделать, скажем, гит сабмодулем и шарить между проектами.


Название: Re: qbs как начать
Отправлено: __Heaven__ от Декабрь 29, 2016, 18:59
Авварон, проблема в том, что модули содержат абсолютные пути, которые могут отличаться на 2 машинах.


Название: Re: qbs как начать
Отправлено: Авварон от Декабрь 29, 2016, 23:02
Авварон, проблема в том, что модули содержат абсолютные пути, которые могут отличаться на 2 машинах.

Кажется, можно сделать переменную модуля и конфигурить её извне (а-ля cpp.includePaths: [...])


Название: Re: qbs как начать
Отправлено: ViTech от Декабрь 30, 2016, 11:44
Кажется, можно сделать переменную модуля и конфигурить её извне (а-ля cpp.includePaths: [...])

Можно. Но настроить библиотеку надо на одной машине для нескольких проектов. Поэтому проще один раз в qbs-модуле библиотеки пути к ней прописать, чем в каждом проекте это делать.


Название: Re: qbs как начать
Отправлено: __Heaven__ от Январь 27, 2017, 08:00
ViTech, а зачем такое разделение h и cpp на группы? Это специально сделано для случая, когда все исходники в одной директории?
Я создал проект с папками src и include. Получил дерево
Include
->MyProject.qbs
->include
---->MyClass.h
Source
->MyProject.qbs
->src
---->MyClass.cpp
Имхо многовато листьев, либо что-то делаю не так. Хотелось бы не видеть папки include и src, а сразу их содержимое.


Название: Re: qbs как начать
Отправлено: ViTech от Январь 27, 2017, 13:45
ViTech, а зачем такое разделение h и cpp на группы? Это специально сделано для случая, когда все исходники в одной директории?

Разделять файлы на группы можно по всякому, в зависимости от структуры проекта и личных предпочтений.

Я создал проект с папками src и include. Получил дерево
...

Можно посмотреть, как выглядит MyProject.qbs? И лучше проект целиком показать.


Название: Re: qbs как начать
Отправлено: __Heaven__ от Январь 27, 2017, 19:56
https://github.com/dsbabkov/MeshTranslator
Залил


Название: Re: qbs как начать
Отправлено: ViTech от Январь 28, 2017, 13:15
Если немного отвлечься и поразмышлять, то получается такая картина: Qbs - это система сборки и существует сама по себе, без привязки к какой-либо IDE. В такой "самостоятельной" системе сборки не должно быть фишек, специфичных для IDE, даже такой "родной", как Qt Creator. Потому что потом одни разработчики захотят фишек для KDevelop, другие для Visual Studio и т.д. При таком раскладе получается, что отображение структуры проекта в IDE должно настраиваться в ней самой, на основе проектных файлов систем сборки. Соответственно храниться эти настройки будут в специфичных файлах IDE (как например *.user в QtCreator), которые индивидуальны для разработчика и не хранятся в системах контроля версий.

Qt Creator отображает файлы по группам, описанным в Qbs. По идее, должны быть расширенные настройки в IDE, позволяющие отображать файлы проекта по желаниям пользователя, но в Qt Creator я такого особо не нашёл. Поэтому остаётся довольствоваться тем, что есть :).

Чтобы немного уменьшить дерево файлов, можно организовать исходники в одной группе, а не в двух:
Код:
    Group {
        name: "Sources"
        prefix: "./**/"
        files: [ "*.h", "*.cpp" ]
    }

Можно ещё по другому организовать структуру файлов самого проекта, когда в папке source файлы *.h лежат рядом с *.cpp, а в include лежат "ссылки" в виде #include "../source/GeometryReader.h", но это уже от политики партии зависит :).