你如何 link Qt 中的库?
How do you link libraries in Qt?
我有一个用 VS2017 编写的项目,它有很多静态库,我已经到了要开始完善 gui 的地步。为了确保我可以使用 Qt,我使用 https://www.toptal.com/qt/vital-guide-qmake, the https://wiki.qt.io/SUBDIRS_-_handling_dependencies example, the https://github.com/rainbyte/example-qmake-subdirs and https://github.com/219-design/qt-qml-project-template-with-ci/tree/6af6488d74e1dc97a8cef545080074055a696e9a 项目中的提示以及 SO 上的几个类似问题制作了一个测试子目录程序。
这包括一个名为“project”的子目录项目以及 2 个子项目“app”和“library”。这些都是使用新建子项目向导创建的简单 QtApplications,除了 main.cpp 之外的所有文件都从“app”中删除,除了“library”中的 main.cpp 之外的所有文件,关键是要确保“library”中的 mainwindow.h 引用自“app”中的 main.cpp。尽管尝试了我能找到的每个示例 我仍然收到“'mainwindow.h' 文件未找到”错误。
根据我能找到的所有示例,您应该只需要在向导生成的 .pro 文件中添加几行 (#),并在“库”项目中添加一个额外的 .pri 文件;
目录结构;
project/
project.pro
app/
app.pro
main.ccp
library/
library.pro
mainwindow.h
mainwindow.ccp
mainwindow.ui
library.pri
project.pro;
TEMPLATE = subdirs
TARGET = project ##
SUBDIRS += \
app \
library
app.depends = library ##
app.pro;
TEMPLATE = app ##
TARGET = app ##
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
CONFIG += c++11
SOURCES += \
main.cpp
include(../library/library.pri) ##
library.pro;
TEMPLATE = lib ##
TARGET = library ##
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
CONFIG += c++11
CONFIG += shared ##
CONFIG += lib_bundle ##
SOURCES += \
mainwindow.cpp
HEADERS += \
mainwindow.h
FORMS += \
mainwindow.ui
DISTFILES += \
library.pri ##
和添加的 library.pri 文件;
LIBTARGET = library
BASEDIR = $${PWD}
INCLUDEPATH *= $${BASEDIR}/include
LIBS += -L$${DESTDIR} -llibrary
我知道这个问题已经被问过很多次了,但我找不到确定的解决方案,或者更确切地说,似乎没有人愿意 post 他们的工作解决方案。我真的很感激任何帮助,我很想能够使用 Qt 并摆脱 win32 ui 创作的炼狱。
你有这个:
INCLUDEPATH *= $${BASEDIR}/include
但是您似乎在任何地方都没有名为 include
的目录。所以可能从上面删除 /include
部分。
我有一个用 VS2017 编写的项目,它有很多静态库,我已经到了要开始完善 gui 的地步。为了确保我可以使用 Qt,我使用 https://www.toptal.com/qt/vital-guide-qmake, the https://wiki.qt.io/SUBDIRS_-_handling_dependencies example, the https://github.com/rainbyte/example-qmake-subdirs and https://github.com/219-design/qt-qml-project-template-with-ci/tree/6af6488d74e1dc97a8cef545080074055a696e9a 项目中的提示以及 SO 上的几个类似问题制作了一个测试子目录程序。
这包括一个名为“project”的子目录项目以及 2 个子项目“app”和“library”。这些都是使用新建子项目向导创建的简单 QtApplications,除了 main.cpp 之外的所有文件都从“app”中删除,除了“library”中的 main.cpp 之外的所有文件,关键是要确保“library”中的 mainwindow.h 引用自“app”中的 main.cpp。尽管尝试了我能找到的每个示例 我仍然收到“'mainwindow.h' 文件未找到”错误。
根据我能找到的所有示例,您应该只需要在向导生成的 .pro 文件中添加几行 (#),并在“库”项目中添加一个额外的 .pri 文件;
目录结构;
project/
project.pro
app/
app.pro
main.ccp
library/
library.pro
mainwindow.h
mainwindow.ccp
mainwindow.ui
library.pri
project.pro;
TEMPLATE = subdirs
TARGET = project ##
SUBDIRS += \
app \
library
app.depends = library ##
app.pro;
TEMPLATE = app ##
TARGET = app ##
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
CONFIG += c++11
SOURCES += \
main.cpp
include(../library/library.pri) ##
library.pro;
TEMPLATE = lib ##
TARGET = library ##
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
CONFIG += c++11
CONFIG += shared ##
CONFIG += lib_bundle ##
SOURCES += \
mainwindow.cpp
HEADERS += \
mainwindow.h
FORMS += \
mainwindow.ui
DISTFILES += \
library.pri ##
和添加的 library.pri 文件;
LIBTARGET = library
BASEDIR = $${PWD}
INCLUDEPATH *= $${BASEDIR}/include
LIBS += -L$${DESTDIR} -llibrary
我知道这个问题已经被问过很多次了,但我找不到确定的解决方案,或者更确切地说,似乎没有人愿意 post 他们的工作解决方案。我真的很感激任何帮助,我很想能够使用 Qt 并摆脱 win32 ui 创作的炼狱。
你有这个:
INCLUDEPATH *= $${BASEDIR}/include
但是您似乎在任何地方都没有名为 include
的目录。所以可能从上面删除 /include
部分。