我在Windows 10下的qt部署有问题。首先,我在Windows 10上使用QtCreator 4.5.0和Qt 5.10。对于部署,我在这个问题中混淆了我的项目文件,如awnser({ {3}}) 一年多以来它运作良好,但自去年年底以来它没有。 如果我构建发布版本一切都很好但在调试模式下一些dll缺失。如果我手动复制这些程序,程序运行正确,否则不会显示图标。到目前为止,我可以在git中看到它在项目文件中没有任何修改,因为它最终正常工作。
项目文件中的部署行:
#######################################
# Deploy Settings
TARGET_CUSTOM_EXT = .exe
DEPLOY_COMMAND = windeployqt
ProgramData.path = C:/ProgramData/Application
ProgramData.files += ressource/xml/config.xml
ProgramData.files += ressource/xml/user.xml
ProgramData.files += ressource/xml/documentation.xml
INSTALLS += ProgramData
# copy to make install
CONFIG( release ) {
AdditionalFiles.path = $${OUT_PWD}/$${DESTDIR}/ressource
AdditionalFiles.files += ressource/xml/config.xml
AdditionalFiles.files += ressource/xml/user.xml
AdditionalFiles.files += ressource/xml/documentation.xml
AdditionalFiles.files += ressource/install.nsi
AdditionalFiles.files += release_notes/*.txt
INSTALLS += AdditionalFiles
}
CONFIG( debug, debug|release ) {
DEPLOY_TARGET = $$shell_quote($$shell_path($${OUT_PWD}/debug/$${TARGET}$${TARGET_CUSTOM_EXT}))
} else {
DEPLOY_TARGET = $$shell_quote($$shell_path($${OUT_PWD}/release/$${TARGET}$${TARGET_CUSTOM_EXT}))
}
QMAKE_POST_LINK += $${DEPLOY_COMMAND} $${DEPLOY_TARGET}
这是我完整的项目文件:
QT += core gui network widgets winextras
TARGET = Application
TEMPLATE = app
TRANSLATIONS = \
translation/Application_de.ts \
translation/Application_en.ts \
translation/Application_es.ts \
translation/Application_fr.ts \
translation/Application_nl.ts
# Settings for favicon/tasksymbol
win32:RC_ICONS += ressource/favicon/favicon.ico
QMAKE_CXXFLAGS += -std=c++11
DEFINES = QT_MESSAGELOGCONTEXT
build_pass:CONFIG(debug, debug|release) {
CONFIG += warn_on
}
#######################################
# Build dir settings
Release:DESTDIR = release
Release:OBJECTS_DIR = release/.obj
Release:MOC_DIR = release/.moc
Release:RCC_DIR = release/.rcc
Release:UI_DIR = release/.ui
Debug:DESTDIR = debug
Debug:OBJECTS_DIR = debug/.obj
Debug:MOC_DIR = debug/.moc
Debug:RCC_DIR = debug/.rcc
Debug:UI_DIR = debug/.ui
#######################################
# Deploy Settings
TARGET_CUSTOM_EXT = .exe
DEPLOY_COMMAND = windeployqt
ProgramData.path = C:/ProgramData/Application
ProgramData.files += ressource/xml/config.xml
ProgramData.files += ressource/xml/user.xml
ProgramData.files += ressource/xml/documentation.xml
INSTALLS += ProgramData
# copy to make install
CONFIG( release ) {
AdditionalFiles.path = $${OUT_PWD}/$${DESTDIR}/ressource
AdditionalFiles.files += ressource/xml/config.xml
AdditionalFiles.files += ressource/xml/user.xml
AdditionalFiles.files += ressource/xml/documentation.xml
AdditionalFiles.files += ressource/install.nsi
AdditionalFiles.files += release_notes/*.txt
INSTALLS += AdditionalFiles
}
CONFIG( debug, debug|release ) {
DEPLOY_TARGET = $$shell_quote($$shell_path($${OUT_PWD}/debug/$${TARGET}$${TARGET_CUSTOM_EXT}))
} else {
DEPLOY_TARGET = $$shell_quote($$shell_path($${OUT_PWD}/release/$${TARGET}$${TARGET_CUSTOM_EXT}))
}
QMAKE_POST_LINK += $${DEPLOY_COMMAND} $${DEPLOY_TARGET}
# The following define makes your compiler emit warnings if you use
# any feature of Qt which as been marked as deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS
#######################################
# Main Project entry
include ( src/app.pri)
#######################################
# Resource files
RESOURCES += \
ressource/Images/Images.qrc
#######################################
# Distfiles
DISTFILES += \
ressource/install.nsi \
favicon.ico
# XML Files
DISTFILES += \
ressource/config.xml \
ressource/user.xml \
ressource/documentation.xml
# Release Notes
DISTFILES += \
release_notes/4_2_0.txt \
release_notes/4_2_3.txt \
release_notes/4_3_0.txt \
release_notes/Template.txt
# Translation
DISTFILES += \
translation/convert_cute_TS_to_gnu_PO.sh \
translation/convert_gnu_PO_to_cute_TS.sh
输出windeployqt - 调试版和发布版的映射: Automatic Copy of Dependent Files in Qt Creator
有人有想法或提示让我找到错误吗?
由于 Sven Arno Jopen
答案 0 :(得分:0)
除非 windeployqt在debug
模式下无法正常工作,否则我认为您不需要这些配置。请注意,几乎所有 qt二进制文件都包含debug
和release
二进制文件。
要强制调试二进制文件的工具使用--debug
,而--release
生成发布二进制文件。
windeployqt --debug --list mapping
该工具的一些选项:
windeployqt:
-?, -h, --help Displays this help.
-v, --version Displays version information.
--debug Assume debug binaries.
--release Assume release binaries.
答案 1 :(得分:0)
我无法解释为什么缺少dll,但我可以告诉您,您可以通过在命令行上指定它们来手动强制它们。在下面的示例中,opengl
和printsupport
库专门用于复制。您还会注意到我们使用.
作为目标。这使windeployqt
查看所有exe和dll文件,并查看它们还需要什么。
实施例:
windeployqt --opengl --printsupport .
答案 2 :(得分:-1)
我从Qt 5.9.1更新到5.10.1,创建者从4.50更新到4.5.1。 部署工具正常工作......似乎这是一个版本问题,但因为我没有找到具体的问题,它只是推测性的。谢谢你的回答!