zoukankan      html  css  js  c++  java
  • win10控制台编译并打包Qt GUI程序

    本文以我的本科毕设(基于Qt的聊天软件)为例,讲一下如何在控制台编译Qt程序,并打包发布。

    控制台编译过程

    1.在win10开始菜单找到以下内容,点击打开控制台

    2.切换到项目所在目录

    其中我的项目整体结构如下:

    3.写好项目的pro文件,例如,我这个项目的pro文件如下所示:

    #-------------------------------------------------
    #
    # Project created by QtCreator 2019-04-22T16:13:03
    #
    #-------------------------------------------------
    
    QT       += core gui sql network multimedia
    
    greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
    
    TARGET = QQ
    TEMPLATE = app
    
    # The following define makes your compiler emit warnings if you use
    # any feature of Qt which has 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
    
    # You can also make your code fail to compile if you use deprecated APIs.
    # In order to do so, uncomment the following line.
    # You can also select to disable deprecated APIs only up to a certain version of Qt.
    #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0
    
    CONFIG += c++11
    
    HEADERS += 
        mainui.h 
        leftbar.h 
        database.h 
        clientsocket.h 
        settingswnd.h
    
    SOURCES += 
        main.cpp 
        mainui.cpp 
        leftbar.cpp 
        database.cpp 
        clientsocket.cpp 
        settingswnd.cpp
    
    # Default rules for deployment.
    qnx: target.path = /tmp/$${TARGET}/bin
    else: unix:!android: target.path = /opt/$${TARGET}/bin
    !isEmpty(target.path): INSTALLS += target
    
    RESOURCES += 
        resource/login_ui/login_ui.qrc 
        qss.qrc 
        icons.qrc
    
    RC_ICONS = exe.ico #exe图标文件
    
    include($$PWD/basewidget/basewidget.pri)
    include($$PWD/cell/cell.pri)
    include($$PWD/comapi/comapi.pri)
    include($$PWD/login/login.pri)
    include($$PWD/midbar/midbar.pri)
    include($$PWD/rightbar/rightbar.pri)
    include($$PWD/titlebar/titlebar.pri)
    
    DESTDIR         = $$PWD/release/QQ
    #OBJECTS_DIR     = $$PWD/release/obj
    #MOC_DIR         = $$PWD/release/moc
    #UI_DIR          = $$PWD/release/ui
    #RCC_DIR         = $$PWD/release/rcc
    
    

    4.在刚才的控制台执行以下命令
    qmake QQ.pro

    这时候控制台输出如下:

    可以观察到,项目文件夹中多了以下文件:

    5.接下来我们用mingw对刚刚生成的makefile执行make操作,该过程使用以下命令:
    mingw32-make

    由于我的项目比较大,所以这个过程执行时间较长(花了3分钟)。
    在编译过程中,输出了很多warning,但是没有error,所以就是编译成功。

    可以看到,编译完成之后,在release目录下生成了exe文件,如下所示:

    这个生成exe文件的目录是在刚才那个pro文件中指定的,如下所示:
    DESTDIR = $$PWD/release/QQ

    6.接下来我们双击这个exe文件,发现报错,原因是缺少相应的dll文件。

    控制台打包发布过程

    1.在刚才我们那个控制台切换到生成的exe文件的目录下,使用以下命令自动打包:
    windeployqt QQ.exe

    控制台输出如下信息:

    C:UsersXJXDesktopQQ
    eleaseQQ>windeployqt QQ.exe
    C:UsersXJXDesktopQQ
    eleaseQQQQ.exe 32 bit, release executable
    Adding Qt5Svg for qsvgicon.dll
    Direct dependencies: Qt5Core Qt5Gui Qt5Network Qt5Sql Qt5Widgets
    All dependencies   : Qt5Core Qt5Gui Qt5Network Qt5Sql Qt5Widgets
    To be deployed     : Qt5Core Qt5Gui Qt5Network Qt5Sql Qt5Svg Qt5Widgets
    Updating Qt5Core.dll.
    Updating Qt5Gui.dll.
    Updating Qt5Network.dll.
    Updating Qt5Sql.dll.
    Updating Qt5Svg.dll.
    Updating Qt5Widgets.dll.
    Updating libGLESV2.dll.
    Updating libEGL.dll.
    Updating D3Dcompiler_47.dll.
    Updating opengl32sw.dll.
    Updating libgcc_s_dw2-1.dll.
    Updating libstdc++-6.dll.
    Updating libwinpthread-1.dll.
    Patching Qt5Core.dll...
    Creating directory C:/Users/XJX/Desktop/QQ/release/QQ/bearer.
    Updating qgenericbearer.dll.
    Creating directory C:/Users/XJX/Desktop/QQ/release/QQ/iconengines.
    Updating qsvgicon.dll.
    Creating directory C:/Users/XJX/Desktop/QQ/release/QQ/imageformats.
    Updating qgif.dll.
    Updating qicns.dll.
    Updating qico.dll.
    Updating qjpeg.dll.
    Updating qsvg.dll.
    Updating qtga.dll.
    Updating qtiff.dll.
    Updating qwbmp.dll.
    Updating qwebp.dll.
    Creating directory C:/Users/XJX/Desktop/QQ/release/QQ/platforms.
    Updating qwindows.dll.
    Creating directory C:/Users/XJX/Desktop/QQ/release/QQ/sqldrivers.
    Updating qsqlite.dll.
    Updating qsqlodbc.dll.
    Updating qsqlpsql.dll.
    Creating directory C:/Users/XJX/Desktop/QQ/release/QQ/styles.
    Updating qwindowsvistastyle.dll.
    Creating C:UsersXJXDesktopQQ
    eleaseQQ	ranslations...
    Creating qt_ar.qm...
    Creating qt_bg.qm...
    Creating qt_ca.qm...
    Creating qt_cs.qm...
    Creating qt_da.qm...
    Creating qt_de.qm...
    Creating qt_en.qm...
    Creating qt_es.qm...
    Creating qt_fi.qm...
    Creating qt_fr.qm...
    Creating qt_gd.qm...
    Creating qt_he.qm...
    Creating qt_hu.qm...
    Creating qt_it.qm...
    Creating qt_ja.qm...
    Creating qt_ko.qm...
    Creating qt_lv.qm...
    Creating qt_pl.qm...
    Creating qt_ru.qm...
    Creating qt_sk.qm...
    Creating qt_uk.qm...
    Creating qt_zh_TW.qm...
    
    C:UsersXJXDesktopQQ
    eleaseQQ>
    

    接着我们可以看到原来QQ.exe目录下多了很多dll文件,如下所示:

    现在我们再双击这个exe文件试试

    我们发现,exe已经能打开了。

  • 相关阅读:
    UVA 10976 Fractions Again?! 简单枚举题
    UVa 11059 Maximum Product(简单枚举7.1)使用longlong,输出格式%lld
    《Java核心技术卷I》——第5章 继承
    《Java核心技术卷I》——第3章 Java的基本程序设计结构
    windows服务器监控多个tomcat运行状态
    org.apache.jasper.JasperException: javax.el.PropertyNotFoundException: Property [xxx] not readable on type [xxx]
    断点续传
    创建密码带有特殊字符的dblink
    带有空格或tab的字符串的判断
    SQLState: 23000
  • 原文地址:https://www.cnblogs.com/njuxjx/p/13809503.html
Copyright © 2011-2022 走看看