调试版的Qt windeployqt并没有复制所有的dll

时间:2018-02-13 15:24:13

标签: qt qt5.10 windeployqt

我在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

3 个答案:

答案 0 :(得分: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.

答案 1 :(得分:0)

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

实施例:     windeployqt --opengl --printsupport .

答案 2 :(得分:-1)

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