Название: qmake сборка с подпроектами Отправлено: kambala от Октябрь 29, 2019, 10:48 Здравствуйте. Пытаюсь разобраться как правильно собирать проект состоящий из подпроектов с помощью qmake (другие системы сборки пока не интересуют). Песочница: https://github.com/kambala-decapitator/qt-test-subprojects
Тестовый пример состоит из следующих частей:
Кое-как удалось всё это реализовать, успешно работает на macOS и Windows msvc+mingw. Но не уверен, что всё сделано по-хорошему :) Воспользовался подходом из https://www.toptal.com/qt/vital-guide-qmake, но там по-моему упущены какие-то детали реализации, потому что копипастой не завелось. В app1.pro я оставил то, что мне сгенерировал Креатор при добавлении core как зависимости и переписанное в читабельном варианте (там еще старое название — lib вместо core). В итоге я это так и перенес в core.pri: как выяснилось, PRE_TARGETDEPS надо, чтобы изменения в core заставляли пересобирать приложения. Еще остались вопросы:
Ну и в общем покритикуйте, расскажите/покажите на примерах как лучше (можно ссылками). Все, что я находил в виде статей, описывало только простейшие случаи. Смотрел в исходники Креатора — там слишком много посторонних деталей, да и все библиотеки динамически линкуются. Название: Re: qmake сборка с подпроектами Отправлено: ssoft от Октябрь 29, 2019, 15:46 Могу предложить собственный способ организации проектов
https://gitlab.com/ssoft-tool/qmake-features Название: Re: qmake сборка с подпроектами Отправлено: kambala от Октябрь 30, 2019, 10:49 спасибо. если честно, выглядит громоздко :) но для больших систем наверняка удобно.
а есть готовые примеры использования? Название: Re: qmake сборка с подпроектами Отправлено: ssoft от Октябрь 30, 2019, 12:48 Сейчас сделаю небольшой туториал.
Если принцип понять - проект моментально формируется. Название: Re: qmake сборка с подпроектами Отправлено: ssoft от Октябрь 30, 2019, 15:51 Все проекты находятся здесь
https://gitlab.com/ssoft-sandbox/prog.org.ru/qmake-tutorial 1. Создаем (если их еще нет) репозитории модулей Это те компоненты, которые будут везде использоваться. Содержат исходные коды, тесты, примеры и т.д. Имеют зависимости между собой. Как правило, модули не собираются сами по себе. Сборка и разработка модулей происходит в рамках комплекса. Я создал module-1 и module-2. https://gitlab.com/ssoft-sandbox/prog.org.ru/qmake-tutorial/module-1 https://gitlab.com/ssoft-sandbox/prog.org.ru/qmake-tutorial/module-2 2. Создаем комплекс Это окружение, в котором осуществлюяется сборка и разработка модулей. Таких окружений (комплексов) может быть много - для сборки тестов, для сборки одного приложения, для сборки нескольких других и т.п., с разными особенностями сборки, CI и др. Я создал complex-1 и complex-2. https://gitlab.com/ssoft-sandbox/prog.org.ru/qmake-tutorial/complex-1 https://gitlab.com/ssoft-sandbox/prog.org.ru/qmake-tutorial/complex-2 Склонировал на ПК Код: git clone git@gitlab.com:ssoft-sandbox/prog.org.ru/qmake-tutorial/complex-1.git 3. Добавляем qmake-features в комплекс Код: git submodule add --name qmake-features git@gitlab.com:ssoft-tool/qmake-features.git project/qmake/features 4. Добавляем модули в комплекс Если модули уже существуют, то следующие действия по добавлению Readme.md выполнять не нужно. Заходим в каждый из модулей и добавляем Readme.md Код: cd my_modules/module-1 Иначе git будет ругаться, потому что модули пустые, без веток и т.п., и подмодули корректно не добавятся). Затем в директории комплекса добавляем подмодули Код: git submodule add --name module-1 git@gitlab.com:ssoft-sandbox/prog.org.ru/qmake-tutorial/module-1.git my_modules/module-1 5. Проектные файлы модулей 5.1. Файлы библиотеки с сорцами Файл проекта библиотеки с сорцами module-1-lib-1.pro Код: TEMPLATE = lib Файл зависимости module-1-lib-1.prf Код: LIBS *= -lmodule-1-lib-1 Здесь указаны зависимости от QT и других модулей DEPENDS, а также, где находятся INCLUDEPATH этого модуля module-1-lib-1 5.2. Файлы библиотеки хидер онли Файл проекта библиотеки module-1-lib-2.pro Код: TEMPLATE = subdirs Файл зависимости module-1-lib-1.prf Код: INCLUDEPATH *= \ 5.3 Файлы приложения Проектный файл my_app.pro Код: TEMPLATE = app Указана прямая зависимость module-1-lib-1, которая автоматически устанавливает и косвенную зависимость от module-1-lib-2. 6. Формируем проектные файлы комплекса Файл проекта my_complex.pro Код: TEMPLATE = subdirs Файл конфигурации .qmake.conf Код: # Общая конфигурация комплекса Мне удобнее в дереве иметь группировку модулей, поэтому, как правило, использую промежуточный файл типа $${PWD}/project/qmake/my_modules.pro Содержимое my_modules.pro Код: TEMPLATE = subdirs Всё ;) Собираем проект complex-1. В дальнейшем проект можно выгрузить, либо сразу с подмодулями Код: git clone git@gitlab.com:ssoft-sandbox/prog.org.ru/qmake-tutorial/complex-1.git --recurse-submodules либо сначала склонировать, а затем инициализировать и обновить подмодули. Код: git clone git@gitlab.com:ssoft-sandbox/prog.org.ru/qmake-tutorial/complex-1.git Название: Re: qmake сборка с подпроектами Отправлено: kambala от Ноябрь 04, 2019, 23:01 большое спасибо! не сразу, но понял структуру модулей и комплексов :)
разрезать на полноценные гит подмодули пока не собираюсь (небольшой проект), это можно и на уровне папок организовать. а в целом где-то примерно так же и буду делать, только наверное с некоторыми упрощениями. Название: Re: qmake сборка с подпроектами Отправлено: SektorCT от Январь 14, 2020, 17:20 Qt уже официально даже приватные свои классы переводит на cmake. Так что выбор qmake для меня как то очень странное решение.
Название: Re: qmake сборка с подпроектами Отправлено: kambala от Январь 14, 2020, 17:33 это был не выбор, а больше для того, чтобы разобраться с такими базовыми вещами. Основными системами сборки буду использовать qbs и cmake, посмотрю какая из них получится проще/понятнее.
Название: Re: qmake сборка с подпроектами Отправлено: SektorCT от Январь 15, 2020, 12:41 это был не выбор, а больше для того, чтобы разобраться с такими базовыми вещами. Основными системами сборки буду использовать qbs и cmake, посмотрю какая из них получится проще/понятнее. Мое предположение что проще наверное будет qbs но вот то что он опять же как и qmake будет заточен больше на Qt проекты сильно усложняет его использование в других IDE и вообще использование. Я вот уже давно во всех как личных проектах так и рабочих использую cmake. И главное что могу не использовать это ... Qt Creator. Да и по фичам все таки он далеко впереди. Хоть и сложнее чем qmake. Название: Re: qmake сборка с подпроектами Отправлено: kambala от Январь 15, 2020, 15:36 ну, с qbs из командной строки несложно работать. плюс он, как и cmake, может генерировать проекты для других систем сборки/IDE.
|