Всем привет. Кто-нибудь пользовался cmake install RUNTIME_DEPENDENCY_SET? Можно это как-то использовать,

чтобы копировать нужные Qt-библиотеки в папку install? Хочу сделать примитивный деплой на коленке через cmake install, как-то надо копировать qt-библиотеки и плагины.

27 ответов

34 просмотра

windeployqt

ep- Автор вопроса
Dårk Pit
windeployqt

да знаю я про это, я хочу кнопку build нажать в qtcreator и получить всё нужное в одном месте без лишних шагов. насколько вижу, qtcreator с windeployqt не интегрирован.

ep
да знаю я про это, я хочу кнопку build нажать в qt...

Это консольная утилита, можно запускать и не руками https://stackoverflow.com/questions/41193584/deploy-all-qt-dependencies-when-building

ep- Автор вопроса
我が名はレギオン
Это консольная утилита, можно запускать и не рукам...

ну я и говорю, через add_custom_command или execute_process запускать её.

ep
ну я и говорю, через add_custom_command или execut...

Если не нравится идея вставлять код в CMake, то Qt Creator поддерживает кастомные шаги сборки

ep- Автор вопроса
我が名はレギオン
Это консольная утилита, можно запускать и не рукам...

Код из примера дикий конечно 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)

ep- Автор вопроса
我が名はレギオン
screenshot Если не нравится идея вставлять код в CMake, то Qt...

Лучше всё в cmake прописать, чтобы не завязываться на креатор

ep- Автор вопроса
Stanislav Ershov
хех, в Qt6 есть add_executable(Qt6::windeployqt IM...

лучше бы добавили свою функцию install, которая внутри бы сама всё подтягивала. Они же добавили свои функции типа qt_add_executable, надо qt_install и всё.

ep
лучше бы добавили свою функцию install, которая вн...

а там есть qt_install )) только делает он слегка другое

ep
лучше бы добавили свою функцию install, которая вн...

install и deploy всё же несколько разные вещи, с точки зрения пакетных менеджеров и вот этого всего

ep- Автор вопроса
Dårk Pit
install и deploy всё же несколько разные вещи, с т...

Согласен. И деплой - это вроде как не дело cmake, хотя он давно уже в комбайн "всё в одном" превратился. Тогда можно и хэлпер сделать qt_deploy. 😏

Пользовался, удобная штука т.к. windeployqt проигнорирует неявные зависимости. Юзаю их оба чтобы всё скопировать

ep- Автор вопроса
Michael Chambers
Пользовался, удобная штука т.к. windeployqt проигн...

Я попробовал сделать file(GET_RUNTIME_DEPENDENCIES) для своего бинарника, он выдал кучу виндовых библиотек из system32 и ни одной qt-шной. Может я неправильно что-то делаю, конечно, но выглядит странно. Это типа пол винды затащить в дистр - бред.

Michael Chambers
Пользовался, удобная штука т.к. windeployqt проигн...

ну кста, за последние годы оно получше стало, особенно с QML

ep
Я попробовал сделать file(GET_RUNTIME_DEPENDENCIES...

там много хаков, смотрите сами https://pastebin.com/qC5Ph63z

ep- Автор вопроса
Michael Chambers
там много хаков, смотрите сами https://pastebin.co...

Да уж, cmake - боль. Спасибо! Пойду разбираться.

Dårk Pit
ну кста, за последние годы оно получше стало, особ...

windeployqt вытягивает неявные кутешные зависимости типа плагинов разных, а через GET_RUNTIME_DEPENDENCIES вытягиваются кутешные либы, которые линкуется к 3rd-party либам? также вытягиваются и сами 3rd-party

ep- Автор вопроса
Michael Chambers
windeployqt вытягивает неявные кутешные зависимост...

Попробовал сделать с windeployqt, для Release конфигурации он зачем-то кладёт vc_redist.x64.exe (vc_redist.x86) файлы вместо библиотек. А для отладочной версии кладёт именно библиотеки (msvcp140d.dll) Это специально так задумано? Типа пользователь должен поставить MSVC runtime в систему самостоятельно?

ep
Попробовал сделать с windeployqt, для Release конф...

Рантайм я кладу в инсталлятор самостоятельно отдельным шагом (не в cmake). Чтобы установился он сам и последний студийный т.к. windeployqt кладет старый. И ещё есть опция --no-compiler-runtime

ep
Попробовал сделать с windeployqt, для Release конф...

у windeployqt флаг для релиза сломан, и это широко известная в узких кругах проблема. либо дебаг, либо ничего.

ep- Автор вопроса
Dårk Pit
у windeployqt флаг для релиза сломан, и это широко...

А что именно сломано? Так то оно вроде работает

Dmitriy [Отпуск]
О да. Собирать релизные dll'ки ручками...

нет, в смысле просто не использовать флаг --release. ладно, я точно не помню, но читал форумы и github issues про один и тот же баг.

ep- Автор вопроса
Dårk Pit
нет, в смысле просто не использовать флаг --releas...

Я этот флаг не задаю, он сам понимает что экзешник релизный

Похожие вопросы

Обсуждают сегодня

Ребята, всем привет. Подскажите, пожалуйста, можно ли как-то через бота понять, что этого бота добавили в группу\канал и выдали ему права администратора?
Artem Stormageddon
9
Это переведённый текст с английского. Я не говорю на русском, но могу использовать переводчик Телеграм. Приветствую! Я начинающий веб-разработчик и все еще учусь. В настояще...
𐩱𐩪𐩣𐩱𐩲𐩺𐩡
2
А не хотим ли мы развлечься? 😉 Но так чтобы с пользой для наших профессиональных навыков?? 👨‍🎓👩‍🎓 Предлагаю на октябрь запланировать тестовый запуск новой командной игры "Игр...
Andrii Kurdiumov
2
Привет всем! Почему этот код не срабатывает при добавлении или удалении пользователя из чата? bot.on('chat_member', async (ctx) => { console.log(ctx); }) bot.launch({allo...
Alexander
5
у кого сколько оперативы на базе данных ?
АДИЛЬБЕК
4
Через бот апи возможно получить ID стикерпака? Не ссылку.
Vexylon [АФК до 09.09]
5
Привет Хочу сделать аналог iCloud’а для своих проектов, чтобы пользовательская информация хранилась в облаке, была доступна во всех сервисах, её можно было подсасывать везде)...
Виталий
9
В тг можно спарсить всех кто пишет в группе? Если список участников скрыт
S
3
код Event::listen('cms.page.display', function (&$content, $slug, $page, $html) { if (is_object($content)) { dump($content); } else { dump($s...
Point 111
3
Доброе утро, мультиязычные сайты делал кто-нибудь? Какие подводные камни? Нужно чего нибудь допом ставить? Как поступить? В теории сделать две папки ru en и туда кидать страни...
Racoon Mitya
2
Карта сайта