У меня есть проект с 5-6 библиотеками и один исполняемый файл. Исполняемый файл зависит от библиотек, а некоторые библиотеки зависят от других библиотек. Как я могу указать порядок сборки, чтобы зависимости создавались до их необходимости?
Как установить порядок сборки в проекте subdir Qt
Ответ 1
Ok. Я нашел решение. Просто добавьте упорядоченное в CONFIG и произносите поддиры в правильном порядке.
CONFIG += ordered
SUBDIRS += Utility GraphicModule PackingLib Core GameProto
Для меня эта работа отлично
Ответ 2
Хотя на этот вопрос был дан ответ и принят давно, я чувствую необходимость добавить еще один ответ; Я честно считаю, что есть лучший ответ.
Я считаю CONFIG += ordered
вредной и плохой привычкой. Вероятно, это было кое-что, что было преждевременно введено разработчиками qmake. И есть сильные противники для его использования. Недостатки следующие:
- он не определяет зависимости, он просто называет порядок сборки
- он забивает многострочное время сборки
- он предотвращает разработку Qt-разработчиков реалистичные функции
Поэтому я предлагаю изменить файл проекта следующим образом:
TEMPLATE = subdirs
SUBDIRS += Utility GraphicModule PackingLib Core GameProto
GameProto.depends = Core
Core.depends = PackingLib
PackingLib.depends = GraphicModule
GraphicModule.depends = Utility
Таким образом, зависимости четко определены. Вы можете также думать о других, более сложных иерархиях зависимостей, которые возможны таким образом и абсолютно невозможны с порядком сборки.
Обновление: (21 июня 2017 года)
К сожалению, qmake
не лучший инструмент, когда речь идет о крупных проектах с глубокими иерархиями подпроектов. Проблемы, связанные с более крупными проектами, следующие:
- невозможно определить зависимости для подпроектов выше в иерархии
-
Run qmake
занимает очень много времени, чтобы выполнить - длительное время компиляции, потому что зависимости обрабатываются неправильно и слишком много ненужных шагов компиляции выполнено
- иногда
qmake
не может правильно рассчитать зависимости между проектами, что делает необходимым компилировать подпроекты отдельно
В основном существуют два способа решения этих проблем:
- Перепишите свой проект на плоскую иерархию. Все исполняемые файлы, статические и динамические библиотеки должны находиться на самом верхнем уровне. Используйте два или более уровней только для подпроектов, где вы абсолютно не можете этого избежать. (например, динамическая библиотека, состоящая из статических библиотек). Это приведет к сокращению времени выполнения
qmake
и сокращению времени компиляции. Однако даже этот подход может иногда не срабатывать. - Перейдите в другой инструмент создания, например
cmake
. Шутки в сторону.cmake
- зрелый продукт, а поддержка из Qt Creator сравнима сqmake
.
Комментарий:
Из-за известных проблем с qmake
компания Qt уже решила внедрить новый инструмент QBS
. Однако использование этого инструмента не так просто, как может показаться при первом впечатлении. Нет простого перехода от qmake
до QBS
, особенно для более сложных проектов. Подобный Javascript синтаксис языка QBS
нелегко понять, а документации недостаточно.
Есть IMHO только два других доступных инструмента, которые могут заменить калибр qmake
: