Russian Qt Forum
Март 29, 2024, 18:06
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Qt-инструментарий
>
Управление структурой проекта (.pro)
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Управление структурой проекта (.pro) (Прочитано 5130 раз)
Apktyc
Самовар
Offline
Сообщений: 130
Управление структурой проекта (.pro)
«
:
Май 28, 2016, 22:02 »
Здравствуйте.
В этой теме хотелось бы обсудить, как Вы справляетесь с упорядочиванием своего проекта, придерживаетесь какой-либо структуры или нет. Может быть в каталоге проекта у Вас твориться творческий беспорядок, где все (от исходников и объектных файлов, до ресурсов и исполняемых) свалено в корневом каталоге, или наоборот везде царит строгий порядок, как в этой статье
Структура Qt-проекта на C++
?
Я никогда не пользовался теневой сборкой, вместо этого у меня в каталоге проекта есть каталог !prototype, куда и складываются бинарники.
Код:
win32:{
DESTDIR = "!prototype/Win32/$$TARGET"
}
PRECOMPILED_DIR = $$DESTDIR
Установка PRECOMPILED_DIR избавляет от появления раздражающих папок debug и release в корневом каталоге проекта.
Всю промежуточную генерацию загоняю в отдельный каталог.
Код:
OBJECTS_DIR = ".build/.obj"
MOC_DIR = ".build/.moc"
RCC_DIR = ".build/.rcc"
Исходники мирно свалены в каталоге "source".
Интересно было бы узнать, как это устроено у Вас.
Ну и вопрос по теме, есть ли возможность также структурировать сборку под Android, а то по-умолчанию все крутится в каталоге android-build.
Записан
Racheengel
Джедай : наставник для всех
Offline
Сообщений: 2679
Я работал с дискетам 5.25 :(
Re: Управление структурой проекта (.pro)
«
Ответ #1 :
Май 29, 2016, 00:54 »
Имхо это главная беда практически всех существующих систем сборок - ад конфигураций
Идеально бы было не иметь возможности вообще никак не влиять на "теневой" процесс, а применять паттерн Convention over Configuration.
То есть разработчика не должно заботить, как и в каком виде будут свалены промежуточные результаты.
Есть папка src, а далее есть папки bin и lib для каждого из поддерживаемых таргетов.
Вы, как разработчик, говорите только, ЧТО вы хотите собрать, а не КАК и КУДА.
Все правила и структура папок - четко предопределены системой сборки, шаг влево-вправо невозможен.
Зависимости - опять же есть глобальный каталог всего, что имеется в распоряжении, в четко предопределенном формате.
Вы указываете что то типа DEPENDS: qwt-6.2.1 (если версия принципиальна), или просто qwt, если не особо. Либо вообще ничего не указываете, и тогда система пытается найти все нужные либы автоматом.
Но это в идеале. А в реале я стараюсь по минимуму загружать pro-файлы (имя таргета, список исходников, ресурсы, инклуды с либами). Теневая сборка? Ну будет теневая. Пусть qmake с креатором думают, куда и шо им положить. Не принципиально.
Записан
What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.
COVID не волк, в лес не уйдёт
ssoft
Программист
Offline
Сообщений: 574
Re: Управление структурой проекта (.pro)
«
Ответ #2 :
Май 30, 2016, 23:56 »
Стройная структура - признак хорошего проекта.
В случае работы над комплексом с большим количеством модулей без стройной структуры не обойтись.
В качестве примера выкладываю разработанное в том числе и мной решение.
Рассматривается комплекс, состоящий из множества компонентов, упорядоченных в произвольной иерархической структуре.
Проектные файлы комплекса:
- файл общей конфигурации config.prf, содержащий только информацию о том, куда и как собирать, и ничего, что относилось бы к компонентам.
- файл depends_path.prf, содержащий либо ручной перечень директорий для поиска компонентов, либо процедуру их автоматического поиска в поддиректориях.
- файл depends_resolver.prf со стандартным содержимым, обеспечивающий автоматическое разрешение зависимостей между компонентами.
- (опционально) другие файлы по желанию
Проектные файлы компонента:
- файл проекта <component>.pro, содержащий перечень исходных фалов и особенности сборки, не влияющие на зависимые компоненты.
- файл config_finder.prf с функцией автоматического поиска общей конфигурации системы (место поиска и наименование файла конфигурации определено здесь и может быть изменено/дополнено при необходимости).
- файл depends.prf (обязателен только для библиотек - компонентов, от которых могут зависеть другие компоненты), содержащий перечень зависимостей и особенности сборки, влияющие на зависимые компоненты.
- (опционально) файл files.prf со стандартным содержимым, позволяющий автоматически добавлять исходные файлы из конкретных директорий (includeFilesFrom) или из директорий и их поддиректорий (includeFiles).
- (опционально) другие файлы по желанию (напимер, файл предкомпилируемого заголовка)
Последовательность операций для qmake следующая:
* анализ проектного файла компонента <component>.pro
** определение типа компонента (lib, app, ...)
** определение особенностей сборки компонента (CONFIG, PRECOMPILED, win32, linux ...), не влияющих на зависимые компоненты
** включение локального файла config_finder.prf для автоматического поиска и включения общей конфигурации комплекса
*** включение файла общей конфигурации комплекса config.prf
*** определение способа, места сборки и расположения генерируемых файлов (CONFIG, DESTDIR, ...)
*** включение файла depends_resolver.prf автоматического разрешения зависимостей между компонентами
**** включение файла depends_path.prf с явным перечнем путей поиска зависимостей или (опционально) процедурой их автоматического определения
**** включение файлов depends.prf с зависимостями конкретных компонентов
***** определение зависимостей библиотек и заголовочных файлов (LIBS, INCLUDEPATH, DEPENDPATH)
***** определение особенностей сборки компонента (CONFIG, win32, linux ...), влияющих на зависимые компоненты
***** определение зависимостей от компонентов Qt (QT).
***** определение зависимостей компонентов комплекса (DEPENDS)
** (опционально) включение локального файла files.prf для возможности автоматического включения исходников
** явное/ручное (через INCLUDES, SOURCES, ...) или автоматическое (через includeFiles, includeFilesFrom ) включение исходников и других файлов
«
Последнее редактирование: Май 31, 2016, 00:52 от ssoft
»
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...