чтобы копировать нужные Qt-библиотеки в папку install? Хочу сделать примитивный деплой на коленке через cmake install, как-то надо копировать qt-библиотеки и плагины.
windeployqt
да знаю я про это, я хочу кнопку build нажать в qtcreator и получить всё нужное в одном месте без лишних шагов. насколько вижу, qtcreator с windeployqt не интегрирован.
Это консольная утилита, можно запускать и не руками https://stackoverflow.com/questions/41193584/deploy-all-qt-dependencies-when-building
ну я и говорю, через add_custom_command или execute_process запускать её.
хех, в Qt6 есть add_executable(Qt6::windeployqt IMPORTED)
Если не нравится идея вставлять код в CMake, то Qt Creator поддерживает кастомные шаги сборки
Код из примера дикий конечно get_target_property(_qt5_qmake_location Qt5::qmake IMPORTED_LOCATION) execute_process( COMMAND "${_qt5_qmake_location}" -query QT_INSTALL_PREFIX RESULT_VARIABLE return_code OUTPUT_VARIABLE qt5_install_prefix OUTPUT_STRIP_TRAILING_WHITESPACE ) set(imported_location "${qt5_install_prefix}/bin/windeployqt.exe") Можно заменить просто на: get_target_property(_qt5_qmake Qt5::qmake IMPORTED_LOCATION) get_filename_component(_qt5_bin_dir ${_qt5_qmake} DIRECTORY) set(_windeployqt ${_qt5_bin_dir}/windeployqt.exe)
Лучше всё в cmake прописать, чтобы не завязываться на креатор
лучше бы добавили свою функцию install, которая внутри бы сама всё подтягивала. Они же добавили свои функции типа qt_add_executable, надо qt_install и всё.
а там есть qt_install )) только делает он слегка другое
install и deploy всё же несколько разные вещи, с точки зрения пакетных менеджеров и вот этого всего
Согласен. И деплой - это вроде как не дело cmake, хотя он давно уже в комбайн "всё в одном" превратился. Тогда можно и хэлпер сделать qt_deploy. 😏
Пользовался, удобная штука т.к. windeployqt проигнорирует неявные зависимости. Юзаю их оба чтобы всё скопировать
Я попробовал сделать file(GET_RUNTIME_DEPENDENCIES) для своего бинарника, он выдал кучу виндовых библиотек из system32 и ни одной qt-шной. Может я неправильно что-то делаю, конечно, но выглядит странно. Это типа пол винды затащить в дистр - бред.
ну кста, за последние годы оно получше стало, особенно с QML
там много хаков, смотрите сами https://pastebin.com/qC5Ph63z
Да уж, cmake - боль. Спасибо! Пойду разбираться.
windeployqt вытягивает неявные кутешные зависимости типа плагинов разных, а через GET_RUNTIME_DEPENDENCIES вытягиваются кутешные либы, которые линкуется к 3rd-party либам? также вытягиваются и сами 3rd-party
Попробовал сделать с windeployqt, для Release конфигурации он зачем-то кладёт vc_redist.x64.exe (vc_redist.x86) файлы вместо библиотек. А для отладочной версии кладёт именно библиотеки (msvcp140d.dll) Это специально так задумано? Типа пользователь должен поставить MSVC runtime в систему самостоятельно?
Рантайм я кладу в инсталлятор самостоятельно отдельным шагом (не в cmake). Чтобы установился он сам и последний студийный т.к. windeployqt кладет старый. И ещё есть опция --no-compiler-runtime
Да не за что)
у windeployqt флаг для релиза сломан, и это широко известная в узких кругах проблема. либо дебаг, либо ничего.
О да. Собирать релизные dll'ки ручками...
А что именно сломано? Так то оно вроде работает
нет, в смысле просто не использовать флаг --release. ладно, я точно не помню, но читал форумы и github issues про один и тот же баг.
Я этот флаг не задаю, он сам понимает что экзешник релизный
Обсуждают сегодня