У меня есть проект с 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: