Russian Qt Forum

Qt => Qt-инструментарий => Тема начата: Гурман от Апрель 21, 2015, 15:28



Название: Очень много проектов...
Отправлено: Гурман от Апрель 21, 2015, 15:28
Сейчас приложение состоит из 16 проектов - основной бинарник, и кучка плагинов. Но надо сделать еще 18 плагинов, каждый из которых состоит из 3-х динамических библиотек (одна библиотека сам плагин, и он подгружает ещё 2). Итого будет 70 проектов... :o И это еще не всё, поскольку надо будет делать еще несколько плагинов, общее число проектов может дорасти до 80.

С этим надо что-то делать, поскольку такие тополя становятся неуправляемыми. Особенно не нравится то, что по три проекта для каждого из 18 плагинов связаны друг с другом. Было бы здорово их создание собрать в один проект, хотя бы уменьшить общее число проектов до 34. Но я так понимаю, в рамках qmake это не возможно? Один .pro проект == один выходной файл, или я ошибаюсь? Некогда сейчас нырять в qmake и разбираться с ним (18 плагинов в очереди на реализацию стоят...), просьба если кто знает способ, как сделать генерацию 3-х выходных файлов (DLL) из одного проекта, расскажите.


Название: Re: Очень много проектов...
Отправлено: gil9red от Апрель 21, 2015, 15:35
Посмотрите формат pri, который в qmake используется.

А как набралось 70 проектов?
16 + 18 + ... = 70?


Название: Re: Очень много проектов...
Отправлено: Kurles от Апрель 21, 2015, 15:40
Создавай каждый проект как проект с подпроектами:
Код:
TEMPLATE = subdirs
SUBDIRS = \
    mainDll \
    subDll1 \
    subDll2



Название: Re: Очень много проектов...
Отправлено: Пантер от Апрель 21, 2015, 15:41
Use CMake, Luke.


Название: Re: Очень много проектов...
Отправлено: Гурман от Апрель 21, 2015, 16:19
А как набралось 70 проектов?


16 + 18 * 3 + ... > 70?

Цитировать
Посмотрите формат pri, который в qmake используется.

pri это я как помню - project include, то есть, всё равно будут два файла pri к одному pro

а хотелось бы, чтобы только 1 pro был для генерации 3-х dll каждого из 18 плагинов

PS хотя это несколько облегчает - меньше закладок в окне Проекты у QtCreator, и в списке проектов вроде будет легче ориентироваться


Название: Re: Очень много проектов...
Отправлено: Гурман от Апрель 21, 2015, 16:22
Создавай каждый проект как проект с подпроектами:
Код:
TEMPLATE = subdirs
SUBDIRS = \
    mainDll \
    subDll1 \
    subDll2

Но это же не избавляет от 3-х файлов .pro на каждый плагин?


Название: Re: Очень много проектов...
Отправлено: Kurles от Апрель 21, 2015, 16:24
Создавай каждый проект как проект с подпроектами:
Код:
TEMPLATE = subdirs
SUBDIRS = \
    mainDll \
    subDll1 \
    subDll2

Но это же не избавляет от 3-х файлов .pro на каждый плагин?
Нет, но зато хоть как то структурирует каждый плагин.


Название: Re: Очень много проектов...
Отправлено: Гурман от Апрель 21, 2015, 16:26
Use CMake, Luke.

Увы... поздно. 16 плагинов + 1 из 18-ти уже работают, а переходить на новых на CMake и иметь потом два разных формата проектов - это наверно еще муторнее будет.


Название: Re: Очень много проектов...
Отправлено: Гурман от Апрель 21, 2015, 16:28
но это же не избавляет от 3-х файлов .pro на каждый плагин?
Нет, но зато хоть как то структурирует каждый плагин.

со структурированием особых проблем нет... проблема с количеством проектов - банально сложно ими в QtCreator оперировать


Название: Re: Очень много проектов...
Отправлено: Kurles от Апрель 21, 2015, 16:44
но это же не избавляет от 3-х файлов .pro на каждый плагин?
Нет, но зато хоть как то структурирует каждый плагин.
со структурированием особых проблем нет... проблема с количеством проектов - банально сложно ими в QtCreator оперировать
Хм. Что тогда изменит перенос трёх про файлов в один? В итоге же всё равно та же древовидная структура?


Название: Re: Очень много проектов...
Отправлено: Гурман от Апрель 21, 2015, 16:50
Хм. Что тогда изменит перенос трёх про файлов в один? В итоге же всё равно та же древовидная структура?

Уменьшение количества закладок в странице Проекты у QtCreator. При переключении с режима Отладка на Релиз это надо делать в каждой закладке отдельно.

Ну и список Проекты короче будет. Уже сейчас по нему лазить искать нужный файл довольно муторно, а там будет вообще нереально. Инкрементального поиска ведь нет.


Название: Re: Очень много проектов...
Отправлено: Kurles от Апрель 21, 2015, 16:57
Хм. Что тогда изменит перенос трёх про файлов в один? В итоге же всё равно та же древовидная структура?

Уменьшение количества закладок в QtCreator. При переключении с режима Отладка на Релиз это надо делать в каждой закладке отдельно.

Ну и список Проекты короче будет. Уже сейчас по нему лазить искать нужный файл довольно муторно, а там будет вообще нереально. Инкрементального поиска ведь нет.
При использовании
Код:
TEMPLATE = subdirs
переключение режимов применяется на все подпроекты, настройки сборки так же применяются ко всем подпроектам. И список проектов так же будет по количеству плагинов, плагины плагинов будут в подпапках.


Название: Re: Очень много проектов...
Отправлено: kuzulis от Апрель 21, 2015, 18:14
Цитировать
Use CMake, Luke.

Use QBS, Luke.  ;)

А если серьезно - посмотри как сделано, к примеру в сорцах QtCreator (для простоты можно взять самую первую его версию v 1.0.0) и сделать по аналогии.


Название: Re: Очень много проектов...
Отправлено: Гурман от Апрель 21, 2015, 23:34
При использовании
Код:
TEMPLATE = subdirs
переключение режимов применяется на все подпроекты, настройки сборки так же применяются ко всем подпроектам. И список проектов так же будет по количеству плагинов, плагины плагинов будут в подпапках.

Что-то я не помню этого в используемом QtCreator 2.2.1. Менять его сейчас нельзя.


Название: Re: Очень много проектов...
Отправлено: Kurles от Апрель 22, 2015, 08:26
При использовании
Код:
TEMPLATE = subdirs
переключение режимов применяется на все подпроекты, настройки сборки так же применяются ко всем подпроектам. И список проектов так же будет по количеству плагинов, плагины плагинов будут в подпапках.

Что-то я не помню этого в используемом QtCreator 2.2.1. Менять его сейчас нельзя.
Не поленился, скачал 2.2.1 - такое же поведение в окне менеджера проектов, как и в 3.3.1.


Название: Re: Очень много проектов...
Отправлено: Гурман от Апрель 22, 2015, 11:14
Хм. У меня в каталоге, который родительский для всех модулей проекта, лежит файл .pro с TEMPLATE = subdirs и т.д. от 2011 года, когда проект начинался. Почему-то я этот вариант тогда забросил - что-то не работало. Но тогда проектов был всего десяток. Придётся попробовать ещё раз.


Название: Re: Очень много проектов...
Отправлено: Kurles от Апрель 22, 2015, 12:07
Хм. У меня в каталоге, который родительский для всех модулей проекта, лежит файл .pro с TEMPLATE = subdirs и т.д. от 2011 года, когда проект начинался. Почему-то я этот вариант тогда забросил - что-то не работало. Но тогда проектов был всего десяток. Придётся попробовать ещё раз.
Надо просто этот про файл и открывать. Ну и в подпроектах так же TEMPLATE = subdirs использовать.


Название: Re: Очень много проектов...
Отправлено: Гурман от Апрель 22, 2015, 12:48
Хм. У меня в каталоге, который родительский для всех модулей проекта, лежит файл .pro с TEMPLATE = subdirs и т.д. от 2011 года, когда проект начинался. Почему-то я этот вариант тогда забросил - что-то не работало. Но тогда проектов был всего десяток. Придётся попробовать ещё раз.
Надо просто этот про файл и открывать. Ну и в подпроектах так же TEMPLATE = subdirs использовать.

Не... я тогда его почему-то забросил. Что-то с ним было не так, что именно - разумеется не помню. Но у меня в QtCreator "последнее состояние" с тех пор всё равно открывало все проекты по-отдельности.


Название: Re: Очень много проектов...
Отправлено: Гурман от Апрель 23, 2015, 00:06
Вроде получается, но возник такой вопрос - можно ли при использовании SUBDIRS передавать макро-имена из верхнего проекта в нижний? То есть, если у меня есть проект wx.pro со строками

TEMPLATE = SUBDIRS
SUBDIRS = w ci_w ciw

я могу в нём как-то определить переменную, например, OUTNAME = button и потом использовать её в проектах w.pro, ci_w.pro и  ciw.pro?

PS: не совсем получается. Сами подпроекты по-отдельности нормально собираются, но при сборке проекта - :-1: ошибка: Makefile.Debug: No such file or directory.  Проект wbutton.pro выглядит так:

TEMPLATE = SUBDIRS
SUBDIRS = w ci_w ciw

Структура в нём:

 Directory wbutton

wbutton.pro
<DIR>          ciw
<DIR>          ci_w
<DIR>          w

 Directory wbutton\ciw

ciw.pro
ciw.h
ciw.cpp

 Directory wbutton\ci_w

ci_w.pro
ci_w.c

 Directory wbutton\w

w.pro
w.h
w.cpp
w.png
w.qrc

Что не так?


Название: Re: Очень много проектов...
Отправлено: Kurles от Апрель 23, 2015, 10:23
Вроде получается, но возник такой вопрос - можно ли при использовании SUBDIRS передавать макро-имена из верхнего проекта в нижний? То есть, если у меня есть проект wx.pro со строками

TEMPLATE = SUBDIRS
SUBDIRS = w ci_w ciw

я могу в нём как-то определить переменную, например, OUTNAME = button и потом использовать её в проектах w.pro, ci_w.pro и  ciw.pro?

PS: не совсем получается. Сами подпроекты по-отдельности нормально собираются, но при сборке проекта - :-1: ошибка: Makefile.Debug: No such file or directory.  Проект wbutton.pro выглядит так:

TEMPLATE = SUBDIRS
SUBDIRS = w ci_w ciw

Структура в нём:

 Directory wbutton

wbutton.pro
<DIR>          ciw
<DIR>          ci_w
<DIR>          w

 Directory wbutton\ciw

ciw.pro
ciw.h
ciw.cpp

 Directory wbutton\ci_w

ci_w.pro
ci_w.c

 Directory wbutton\w

w.pro
w.h
w.cpp
w.png
w.qrc

Что не так?
1. скорее всего только через инклюды *.pri файлов или через создание .qmake.cache (сам не использовал этот метод, но видел, что он используется в QSerialPort, посмотри там)
2. вроде всё так. Попробуй очистку сделать и заново qmake запустить.


Название: Re: Очень много проектов...
Отправлено: gil9red от Апрель 23, 2015, 10:30
С pri делал вот в этом проекте: https://github.com/gil9red/NotesManager/blob/master/NotesManager.pro


Название: Re: Очень много проектов...
Отправлено: Гурман от Апрель 23, 2015, 13:00
1. скорее всего только через инклюды *.pri файлов или через создание .qmake.cache (сам не использовал этот метод, но видел, что он используется в QSerialPort, посмотри там)
2. вроде всё так. Попробуй очистку сделать и заново qmake запустить.

С .pri можно, но топорно... Или через переменные среды, но так еще хуже.

Очистку делал, qmake перезапускал - не помогает ничего. Глухо ошибка при сборке верхнего проекта. Причем мгновенно, то есть, на верхнем уровне где-то, не в самих проектах.

Вроде нашел, TEMPLATE = subdirs должно быть, регистр важен. Но спотыкается на файле заголовков, не находит его, хотя он точно имеется.


Название: Re: Очень много проектов...
Отправлено: Kurles от Апрель 23, 2015, 13:27

WARNING: Unable to generate output for: ......../wbutton-build-desktop//Makefile.Release [TEMPLATE SUBDIRS]
WARNING: Unable to generate output for: ......../wbutton-build-desktop//Makefile.Debug [TEMPLATE SUBDIRS]

Видимо из-за двойных слэшей, откуда он их взял? Нигде в настройках их не видно.
Может быть здесь?


Название: Re: Очень много проектов...
Отправлено: Гурман от Апрель 23, 2015, 13:39
Нет. Косяк в TEMPLATE = SUBDIRS, должно быть subdirs.

Вроде заработало... Во всяком случае проект с тремя подпроектами собрался. Теперь надо супер-проект сделать, который все проекты собирать будет.


Название: Re: Очень много проектов...
Отправлено: Igors от Апрель 24, 2015, 07:56
Теперь надо супер-проект сделать, который все проекты собирать будет.
Иногда лучше главный (большой) проект держать одним, а вот все плагины/либы собрать в другом


Название: Re: Очень много проектов...
Отправлено: Гурман от Апрель 24, 2015, 11:47
Теперь надо супер-проект сделать, который все проекты собирать будет.
Иногда лучше главный (большой) проект держать одним, а вот все плагины/либы собрать в другом
Иногда - наверно да. Но не в моем случае. "Главный проект" - это интегратор плагинов, всё приложение строится из них.


Название: Re: Очень много проектов...
Отправлено: Гурман от Май 15, 2015, 01:10
up

Во всей этой структуре, не работает один момент - почему-то при изменениях одного из хидеров, не пересобираются подпроекты, в которые он входит. Зависимости в проектах разумеется прописаны. Хидер лежит не в каталогах этих проектов, он лежит сбоку и является общим для подпроектов:

В подпроектах написано:

INCLUDEPATH += ../../max15 \
    ../../Integrator

SOURCES += \
    w.cpp

HEADERS  += \
    ../../max15/interface.h \
    ../../Integrator/wcontrol.h \
    w.h \
    ../../Integrator/wcinculdes.h

wcontrol.h включен в w.h, а w.h в w.cpp - во всех подпроектах этого уровня все имена w.h и w.cpp одинаковые, но содержимое разное

Вот при изменении wcontrol.h подпроекты не собираются. И каждый раз при изменении wcontrol.h приходится полностью пересобирать все подпроекты, в которые он включен. Сейчас их 4, а будет 22... Они входят в главный суперпроект, который subirs. А его пересборка сейчас уже занимает 10 минут.

Где собака порылась? Сообщений об ошибках в маршрутах нет, все файлы доступны.


Название: Re: Очень много проектов...
Отправлено: twp от Май 21, 2015, 13:16
В Qt4 это должно лечится так
Код:
CONFIG *= depend_includepath
А в пятерке эта опция вроде как по умолчанию (http://stackoverflow.com/questions/16769541/does-a-qt-5-programmer-have-to-know-about-dependpath-qmake-variable)


Название: Re: Очень много проектов...
Отправлено: Гурман от Май 21, 2015, 20:50
В Qt4 это должно лечится так
Код:
CONFIG *= depend_includepath
А в пятерке эта опция вроде как по умолчанию (http://stackoverflow.com/questions/16769541/does-a-qt-5-programmer-have-to-know-about-dependpath-qmake-variable)

О! Наконец-то... А что будет, если эта настройка останется при переходе на 5-ку?


Название: Re: Очень много проектов...
Отправлено: twp от Май 21, 2015, 22:08
О! Наконец-то... А что будет, если эта настройка останется при переходе на 5-ку?

Ничего. Просто использование *= для установки в CONFIG исключает дублирование параметров, в отличие от +=. Но и в случае дублирование этого параметра тоже ничего страшного не будет. И единственное что может в корне поменять (и по сути сделать как в Qt4), так это удаление этого параметра:

Код:
CONFIG -= depend_includepath


Название: Re: Очень много проектов...
Отправлено: Гурман от Май 21, 2015, 22:27
Просто, если я буду переводить на 5-й, то могу к тому времени забыть про эту настройку.


Название: Re: Очень много проектов...
Отправлено: twp от Май 21, 2015, 23:28
Ну пускай так и останется - мало-ли, вдруг в тестовых целях надо будет собирать и на четверке. Или в пятерке всплывут какие-то баги, которых не было и придется вернуться на четверку.


Название: Re: Очень много проектов...
Отправлено: Гурман от Май 22, 2015, 00:30
Ну пускай так и останется - мало-ли, вдруг в тестовых целях надо будет собирать и на четверке. Или в пятерке всплывут какие-то баги, которых не было и придется вернуться на четверку.

Если при сборке на 5-м эта настройка ни на что не повлияет - то да.