Разделяем исходники по функционалу

Тут представлен возможно самый правильный (удобный) вариант выделения части функционала большого проекта в отдельный подпроект (применительно к qmake).

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

Создаем на диске каталог equipment и в нем по каталогам раскидываем наши классы

фотка 1

Каталог abstract для абстрактного класса для всего оборудования.

Каталог abstract_kkt для абстрактного класса кассовых аппаратов.

atol классы оборудования ккт atol.

mercury классы оборудования ккт Меркурий и т.д.

Это будут просто исходники (классы). И еще pri файлы к ним, чтобы не добавлять все файлы по отдельности в новый проект, а сделать один include сразу всех нужных файлов (*.cpp, *.h).

Тут важно обратить внимание на то, что у всех каталогов один уровень каталогов в файловой системе.

Это удобно с точки зрения подключения заголовочных файлов. Они все имееют общий исходный каталог на уровне каталога equipment.То есть нет вложенности каталогов.

Поэтому достаточно будет сделать один INCLUDEPATH += ../ ( это на каталог equipment) и все заголовочные файлы сразу будут найдены.

Далее важный момент - конечно нам надо тестировать каждое наше оборудование отдельно еще до включения в общий проект.

Для этого создаем в том же каталоге equipment проекты типа app для каждого оборудования например test_mercury_kkt или test_kkt_atol.

Далее в Qt Creator (у нас 2.4.1) открываем эти проекты, инклудами добавляем нужные pri файлы из нужных каталогов.

фотка 2

Собираем отдельно каждый из test проектов оборудования и отлаживаем их.

фотка 3

Все инклуды pri файлов красиво разварачиваются в дереве проектов (см. Qt Creator слева панель).

Разумеется в общий проект тестовые проекты не добавляются.

Примечание: my_lib это просто личные библиотеки, которые нужны всегда во всех проектах.

Есть еще важный момент - все заголовочные файлы подключаются через #include с полным относительным путем от уровня каталога equipment. Например:

#include "abstract/abstract.h"

Это во первых дополнительно защищает от конфликтов дубликатов имен (h файлов).

И во вторых все эти файлы будут найдены средой сборки и подключены, если добавить в проект INCLUDEPATH на каталог equipment, что очень удобно не правда ли.