在 QT Creator 中从 QT+openCV 项目 运行 构建一个独立的 exe 文件

build a standalone exe file form a QT+openCV project running in QT Creator

我最近刚刚在 QT Creator 框架中编写了一个项目,它既使用了 QT 库,例如 QT_Widget,也使用了 openCV 库,例如 openCV_tracking。 我的项目包括 .ui 、 .pro 、 main.cpp 和一些带有 .h 和 .cpp 文件的 类。

我的 .pro 文件是:

QT       += \
        core gui \
        concurrent widgets

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = Version7
TEMPLATE = app

DEFINES += QT_DEPRECATED_WARNINGS

#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0

CONFIG += \
   c++11 \
   cmdline

SOURCES += \
    main.cpp \
    mainwindow.cpp \
    videoprocessor.cpp \
    robottracker.cpp \
    robotdetector.cpp \
    obstaclesdetector.cpp \
    pathcapture.cpp

HEADERS += \
    mainwindow.h \
    videoprocessor.h \
    robottracker.h \
    robotdetector.h \
    obstaclesdetector.h \
    pathcapture.h

FORMS += \
    mainwindow.ui

# including openCV needed files
INCLUDEPATH += E:\MyOpenCV\install\include
INCLUDEPATH += C:\openCV\opencv\build\include
LIBS += -LE:\MyOpenCV\install\x64\vc15\lib \
           -lopencv_tracking430
LIBS += -LC:\openCV\opencv\build\x64\vc15\lib \
           -lopencv_world430

# Default rules for deployment.
 qnx: target.path = /tmp/$${TARGET}/bin
 else: unix:!android: target.path = /opt/$${TARGET}/bin
 !isEmpty(target.path): INSTALLS += target

它在 QT creator 中运行没有问题;但现在我想与我的团队分享它,为此我想从中 build 一个独立的 exe 文件,它静态链接项目中使用的所有库。 有人可以请 guide 我如何使用 QT Creator 或其他一些选项来做到这一点? 在互联网上有一些建议,但 none 有效。

我之前尝试过这个但最终放弃了,虽然这绝对是可能的。

Qt 如此隐藏如何做的原因是他们更喜欢人们动态 link 到他们的库,因为它既允许用户 update/change Qt dll 随心所欲,并且 (我认为这是真正的原因)它使开发人员正在使用他们的套件变得更加明显。

我会引导你朝着我认为应该采取的方向前进,但不幸的是,我不太确定你能取得多大的成功。

  1. 首先您需要静态构建实际的 Qt 库。我假设您使用 Qt Creator 附带的 MinGW 作为编译器。按照下面的教程https://wiki.qt.io/Building_a_static_Qt_for_Windows_using_MinGW , you can download the following powershell script (ensure you have powershell installed): https://sourceforge.net/p/qtlmovie/code/ci/v1.2.16/tree/build/windows-build-qt-static.ps1?format=raw。只要您在 C:\Qt 下安装了 Qt,并且在此文件夹中有一个名为 "Static" 的子目录,您应该能够简单地 运行 这个脚本并等待 Qt 构建到该文件夹​​中。

  2. 其次,您需要 link 针对应用程序中的 Qt 库。打开 Qt Creator,转到工具 > 选项 > "Build & Run"。 Qt 教程说明如下:

Go to tab "Qt Versions". In the "qmake location" table, there must be an "Auto-detected" part and a "Manual" part. In the "Auto-detected" part, there should be one line named "Qt 5.5.0 MinGW 32bit C:\Qt\Qt5.5.0.5\mingw492_32\bin\qmake.exe". The "Manual" part is initially empty.

Click "Add", browse to C:\Qt\Qt5.5.0\bin and select "qmake.exe". The version name is automatically set to "Qt 5.5.0 (5.5.0)". You should set a more meaningful name such as "Qt 5.5.0 MinGW Static 32bit"

Then go to tab "Kits". Again, there must be an "Auto-detected" part and an initially empty "Manual" part. Click "Add". Set a meaningful name such as "Desktop Qt 5.5.0 MinGW Static 32bit". In the "Qt version" field, select your static environment, named "Qt 5.5.0 MinGW Static 32bit" if you followed the above advice.

  1. 单击左上角的 "Add Kit",然后 select 您的静态套件,如果您遵循上述建议,则名称为 "Desktop Qt 5.5.0 MinGW Static 32bit"。

应该是这样。不幸的是我无法自己尝试,但这应该是一般程序。很多教程看起来很啰嗦,但一般来说,如果你一步一步地跟着他们,他们最终就会成功。

此外,请注意,他们在上述说明中并未提及 "static" 目录。我认为这是不正确的,这就是他们实际指的是什么,所以也许可以尝试一下,尽管我不确定。

祝你好运!