Cmake, Qt: динамически менять путь к Bin и плагинам для версий x86 / x64 - PullRequest
0 голосов
/ 27 марта 2019

Уже исследовано несколько подобных решений в SO, похоже, ни одно из них не работает.

Я создал два сценария-обертки, меняя PATH env для версий Qt для x86 и x64, только на время отладки приложения.конкретной архитектуры приложения.

Например, выбирая конфигурацию x86, мне нужно добавить путь к msvc2015\bin и msvc2015\plugins\platforms, чтобы иметь возможность отлаживать приложения x86 Qt.Для x64 это будет msvc2015_64\bin и msvc2015_64\plugins\platforms соответственно.

В качестве первой версии я создал скрипт setup_path.cmd и выполнил его как шаг перед сборкой

setup_path.cmd

@echo off

set PATH=%PATH%;C:\Qt\5.11.2\msvc2015\bin;C:\Qt\5.11.2\msvc2015\plugins\platforms

... и вызывается как шаг предварительной сборки из CMakeLists.txt

add_custom_command(TARGET ${TARGET} PRE_BUILD COMMAND cmd /c ${CMAKE_CURRENT_SOURCE_DIR}/setup_path.cmd)

Путь ${CMAKE_CURRENT_SOURCE_DIR} не содержит пробелов.

Сценарии выполняются нормально, но приложение Qt под отладчиком по-прежнему не видит библиотеки и плагины Qt.

Я выбрал способ редактирования PATH в качестве наиболее очевидного, возможно, есть более конкретный способ для Qt, ноЯ не мог легко найти в документации.

1 Ответ

0 голосов
/ 28 марта 2019

Это связано с тем, что среда сборки отличается от среды запуска / отладки. Изменение PATH для среды сборки не повлияет на среду запуска / отладки вашего приложения (по крайней мере, не для CMake).

Проблема в том, что вам нужно указать Windows, откуда взять библиотеки Qt. Поиск DLL выполняется окнами в 4 основных шага в следующем порядке (подробнее здесь ):

  1. Каталог, из которого загружено приложение
  2. Текущий каталог
  3. Системные каталоги
  4. Каталоги, перечисленные в переменной среды PATH

Изменение системных папок Windows на самом деле не то, что вы хотите делать в этом случае, поэтому у нас есть три других варианта.

  1. Скопируйте необходимые библиотеки DLL в каталог приложения. Этот подход обычно используется разработчиками приложений, когда они хотят иметь «портативную» версию программного обеспечения, которая не зависит от пользователей, желающих установить Qt. Это может быть достигнуто с помощью windeployqt или BundleUtilities.

  2. Наличие необходимых DLL в текущей рабочей папке. Скопируйте DLL в ваш рабочий каталог. Рабочий каталог в Visual Studio определен в Properties of your project -> Configuration Properties -> Debugging -> Working Directory и по умолчанию установлен в $(ProjectDir).

  3. При запуске отладчика добавьте путь к DLL в переменную среды PATH. Visual Studio имеет поле Properties -> Configuration Properties -> Debugging -> Environment, которое позволяет изменять среду. К сожалению, CMake не имеет возможности сделать это для вас. Но мы можем подойти к этому по-другому - изменив Properties -> Configuration Properties -> VC++ Directories -> Executable Directories. CMake, начиная с версии 3.12, имеет переменную CMAKE_VS_SDK_EXECUTABLE_DIRECTORIES для доступа к ней.


Также проверьте этот ответ

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...