Как установить порядок сборки в проекте subdir Qt - программирование
Подтвердить что ты не робот

Как установить порядок сборки в проекте subdir Qt

У меня есть проект с 5-6 библиотеками и один исполняемый файл. Исполняемый файл зависит от библиотек, а некоторые библиотеки зависят от других библиотек. Как я могу указать порядок сборки, чтобы зависимости создавались до их необходимости?

4b9b3361

Ответ 1

Ok. Я нашел решение. Просто добавьте упорядоченное в CONFIG и произносите поддиры в правильном порядке.

CONFIG += ordered

SUBDIRS += Utility GraphicModule PackingLib Core GameProto

Для меня эта работа отлично

Ответ 2

Хотя на этот вопрос был дан ответ и принят давно, я чувствую необходимость добавить еще один ответ; Я честно считаю, что есть лучший ответ.

Я считаю CONFIG += ordered вредной и плохой привычкой. Вероятно, это было кое-что, что было преждевременно введено разработчиками qmake. И есть сильные противники для его использования. Недостатки следующие:

  • он не определяет зависимости, он просто называет порядок сборки
  • он забивает многострочное время сборки
  1. он предотвращает разработку 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:

  • cmake - хорошо известный инструмент построения.
  • meson, система с открытым исходным кодом, которая должна быть как очень быстрой, так и, что более важно, максимально удобной для пользователя.