Где windeployqt.exe хранит каталог Qt?

При попытке запустить windeployqt.exe как он узнает, где искать библиотеки Qt?

Я использую Windows, Qt 5.3, msvc2013_opengl.


У меня есть следующая установка:

  • Сначала Qt был распакован в C:/PathA/Qt/5.3. Там работало нормально.
  • Я скопировал Qt в C:/PathB/Qt/5.3
  • Затем я переименовал папку C:/PathA/ в C:/PathC/, чтобы «скрыть» старое место.

При запуске C:/PathB/Qt/5.3/.../windeployqt.exe жалуется, что не может прочитать файл C:/PathA/.../QtPrintSupport.dll - разумеется, потому что этого файла больше не существует....

Я старался:

  • локальное переопределение переменных среды в оболочке.
  • Удалил все вхождения PathA из переменных окружения и перезагрузился.
  • Поиск в реестре для PathA.
  • Проверил qt.conf как в PathB, так и в PathC - оба содержат относительные пути.
  • Проверил исходный код windeployqt - вроде вызывает qmake -query.
  • Вызывается как qmake.exe -query - они возвращают PathB и PathC, как и ожидалось.
  • Поменял пути в обоих qtenv2.bat.

Тем не менее, windeployqt настаивает на поиске C:/PathA — так откуда же он берет это значение?


PS: я знаю, что могу попытаться удалить все версии Qt, избавиться от всего, что связано с Qt, и переустановить его с нуля. Однако это не то, что меня интересует. Я заинтересован в том, чтобы разрешить несколько версий Qt, установленных рядом друг с другом, и контролировать, какую из них использовать (с помощью CMake и Visual Studio).


Изменить: в отличие от этот вопрос, я не использую QtCreator и областью этого вопроса является не «Как установить несколько версий Qt при использовании QtCreator?». Вопрос конкретно "Откуда windeployqt.exe берет путь к библиотекам Qt?"


person Anedar    schedule 19.09.2019    source источник
comment
Это проблема XY. Не пытайтесь заставить инструмент работать не так, как он задуман. Вы уже можете установить несколько версий Qt рядом. Все это задокументировано здесь: doc .qt.io/qtcreator/creator-project-qmake.html   -  person gavinb    schedule 20.09.2019
comment
Возможный дубликат Установка нескольких версий библиотеки Qt   -  person gavinb    schedule 20.09.2019
comment
Я не использую ни QtCreator, ни qmake. Я использую CMake, Visual Studio и windeployqt. И при вызове windeployqt где-то хранятся несуществующие пути...   -  person Anedar    schedule 21.09.2019


Ответы (2)


Цитирование этой страницы:

Windeployqt принимает в качестве аргумента файл .exe или каталог, содержащий файл .exe, и сканирует исполняемый файл на наличие зависимостей... Затем выявленные зависимости копируются в каталог исполняемого файла. Кроме того, жестко заданные локальные пути в Qt5Core.dll заменяются относительными.

Так что, вероятно, вы ищете эти жестко запрограммированные пути в Qt5Core.dll, вы можете использовать шестнадцатеричный редактор для поиска «qt_prfxpat».

person Former contributor    schedule 20.09.2019
comment
Я нашел жестко заданные пути и отредактировал их, но Windeployqt впоследствии использовал те же пути. Похоже, что в этой документации сказано только, что windeployqt скопирует Qt5Core и отредактирует там сохраненные пути. Однако ваш ответ привел меня на правильный путь... - person Anedar; 21.09.2019

Насколько я понимаю, порядок такой:

  • Если в одном из каталогов в PATH найден файл qmake.exe с файлом qt.conf, windeployqt использует <path to qmake&qt.conf>/<prefix in qt.conf>/bin
  • иначе, если qmake.exe находится в том же каталоге, что и windeployqt.exe, используется жестко заданный путь qt_binspath в qmake.exe
  • иначе, если в PATH найдено qmake.exe, используется qt_binspath
  • иначе windeployqt завершается с ошибкой «Невозможно запросить qmake: CreateProcessW не удалось»

Спасибо Педро за подсказку о жестко заданных значениях и предложение использовать шестнадцатеричный редактор.

person Anedar    schedule 20.09.2019