0

我在 Windows 10 下的 qt 部署有问题。一开始,我在 Windows 10 上使用 QtCreator 4.5.0 和 Qt 5.10。对于部署,我像这个问题中的 awnser 一样配置我的项目文件(Automatic Copy of Dependent Qt Creator 中的文件)一年多以来它工作正常,但自去年年底以来它没有。如果我构建发布版本一切都很好,但在调试模式下,一些 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 --list 映射的输出: 用于调试和发布版本的 windeployqt --list 映射的输出

有人有想法或提示让我找到错误吗?

谢谢斯文·阿诺·乔彭

4

3 回答 3

1

我无法解释为什么缺少 dll,但我可以告诉您,您可以通过在命令行上指定它们来手动强制它们。在下面的示例中,专门调用了要复制的库openglprintsupport您还会注意到我们将.其用作目标。这使得windeployqt查看所有 exe 和 dll 文件,看看他们还需要什么。

例子: windeployqt --opengl --printsupport .

于 2018-02-13T19:27:04.200 回答
0

在我从 Qt 5.9.1 更新到 5.10.1 和 Creator 从 4.50 到 4.5.1 之后。部署工具正常工作......这似乎是一个版本问题,但因为我没有找到具体问题,它只是推测性的。感谢您的回答!

于 2018-02-14T13:36:44.320 回答
0
  • 我认为您不需要这些配置,除非windeployqt 不能真正在debug模式下工作。请注意,几乎所有qt 二进制文件都包含debugrelease二进制文件。

  • 要强制调试二进制文件的工具使用 --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.
于 2018-02-13T15:39:13.783 回答