LINUX.ORG.RU

Использование cmake функционала qt для деплоя

 , , , ,


0

2

Всем доброго дня.

Пробуем использовать для копирования qt-зависимостей приложения не ручной вызов windeployqt (ну простите за винду, как будет понятно ниже, вопрос скорее про работу qt чем про конкретно виндовс-специфичные штуки), а через использование соответствующих функций cmake (т.е. ьех функций, которые добавлены библиотекой qt), а именно:


qt_add_executable(...
qt_add_qml_module(...
qt_deploy_runtime_dependencies(...
qt_deploy_qml_imports(...

и далее вызывается

cmake --install . --config Release --prefix ...

Так вот по сравнению с тем, что получается в итоге после вызова windeployqt у результата после указанных cmake команд в каталоге qml отсутствуют файлы *.qml и *.qmltypes.

Например вот содержимое каталога qml/QtMultimedia/ после вызова windeployqt:

qmldir
quickmultimediaplugin.dll
Video.qml
plugins.qmltypes

а вот его содержимое после указанных команд cmake и вызова cmake –install:

qmldir
quickmultimediaplugin.dll

При этом приложение вроде как запускается и работает, но там много функционала, возможно мы что-то не видим, что может не работать. Вопрос: эти файлы нужны в развертнутом приложении или нет?

Update 0: исправил, поосле ручного вызова windeployqt получается больше файлов (*.qml и *.qmltypes).

Update 1: Согласно ответам https://bugreports.qt.io/browse/QTBUG-126437:

The qml files are embedded into qt qrc resources, are are compiled and linked into the qml modules. So it is not necessary anymore to deploy them as files.

The qmltypes files are only used by tooling like Qt Creator, and perhaps other qml tools like qmllint. Given that you are deploying the application with the aim to run it on a machine, you're past the development point, no tooling will be executed anymore, so you don't need the qmltypes files.
★★★★★

Последнее исправление: rumgot (всего исправлений: 5)

*.qml возможно нужны, возможно нет, зависит от вашего способа их использовать. Иногда их кладут в ресурсы, иногда компилируют, если коммерческая версия Qt. В таких случаях не нужны.

*.qmltypes нужны только для разработки, в деплое не нужны.

unC0Rr ★★★★★
()

Вопрос: эти файлы нужны в развертнутом приложении или нет?

It depends.

Можно закомпилять все qml в qrc, а можно и деплоить вместе с приложением.

aol ★★★★★
()
Ответ на: комментарий от unC0Rr

Это не наши *.qml файлы, наши все компилируются в ресурсы. Это файлы из библиотеки Qt, вот например начало файла Video.qml (указан выше в составе каталога qml/QtMultimedia/):


// Copyright (C) 2016 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only

import QtQuick
import QtMultimedia

/*!
    \qmltype Video
    \inherits Item
    \ingroup multimedia_qml
    \ingroup multimedia_video_qml
    \inqmlmodule QtMultimedia
    \brief A convenience type for showing a specified video.
rumgot ★★★★★
() автор топика
Последнее исправление: rumgot (всего исправлений: 2)

Не используй систему сборки для деплоя и волосы будут гладкими и шелковистыми. Особенно это касается Windows.

anonymous
()

Вопрос: эти файлы нужны в развертнутом приложении или нет?

лучше сделать чистую виртуалку и проверить, потому что кроме них там еще разные другие могут оказаться нужны, об чем сообщат после запуска

Syncro ★★★★★
()