以下是向您的 Qt 项目添加 3rd 方存储库并从源代码构建它的说明。
有些人可以通过 Qt Creator 添加这样的库,但我永远无法让它工作。因此,这些是有关如何创建必要文件.pro
的说明。.pri
在这篇文章中,我将zlib
用作示例,尽管其他库应该类似。
设置构建顺序
由于您的应用程序依赖于该库,因此我们需要确保首先构建该库。为此,您的应用程序的第 3 方库和源代码应位于同级目录中。
~/myApp $ ls myApp
src zlib
您可能已经有一个myApp.pro
可以正确构建您的应用程序的文件。我建议将其重命名为src.pro
,您将在下一步中了解原因。
mv src/myApp.pro src/src.pro
myApp.pro
现在您可以在根目录中新建一个。
~/myApp $ touch myApp.pro
~/myApp $ ls
myApp.pro src zlib
这是一个相当简单的.pro
文件,只是说“构建zlib
之前myApp
”。
# ~/myApp/myApp.pro
TEMPLATE = subdirs
CONFIG += ordered # This tells Qt to compile the following SUBDIRS in order
SUBDIRS = zlib src
创建库 .pro 文件
现在我们需要告诉 Qt 如何构建我们的 3rd 方库。我们通过创建一个新.pro
文件来做到这一点:
# ~/myApp/zlib/zlib.pro
TARGET = z # The name of the output library - can be whatever you want
TEMPLATE = lib # Tells Qt that we are compiling a library so the output will be bundled into a .a or .so file
CONFIG += staticlib # Tells Qt that we want a static library, so a .a file. Remove this and you will get a .so file
QMAKE_CFLAGS_WARN_ON -= -Wall # Optional - disable warnings when compiling this library
QMAKE_CXXFLAGS_WARN_ON -= -Wall # Optional - disable warnings when compiling this library
HEADERS += \
crc32.h \
deflate.h \
gzguts.h \
inffast.h \
inffixed.h \
inflate.h \
inftrees.h \
trees.h \
zconf.h \
zlib.h \
zutil.h
SOURCES += \
adler32.c \
compress.c \
crc32.c \
deflate.c \
gzclose.c \
gzlib.c \
gzread.c \
gzwrite.c \
infback.c \
inffast.c \
inflate.c \
inftrees.c \
trees.c \
uncompr.c \
zutil.c
如果您要构建的不是zlib
.,只需更改TARGET
库的名称,并将 和 的内容替换为HEADERS
需要SOURCES
为您的库编译的文件。
您现在可以继续测试此.pro
文件。
~/myApp/zlib/ $ qmake
~/myApp/zlib/ $ make
...
~/myApp/zlib/ $ ls libz.a
libz.a
耶!
将库链接到您的应用程序
最后,我们需要更新.pro
您的应用程序文件以链接到 3rd 方库。这有两个部分:
- 将库头文件添加到您的包含路径,以便编译器可以从那里获取定义的符号。
- 在编译和链接期间链接静态(或共享)库,以便可以将适用的目标代码链接到您的应用程序中。
首先,我们将头文件添加到包含路径中。将此行添加到src.pro
.
INCLUDEPATH += zlib
这使您可以zlib.h
像这样在代码中引用:
#include "zlib.h"
否则,您必须像这样指定标头的完整相对路径:
#include "zlib/zlib.h"
如果您对第二种方法没问题,那么应该不需要更新INCLUDEPATH
变量。
其次,我们需要添加链接器查找静态(或共享)库本身所需的参数。将此行添加到src.pro
.
LIBS += -L$$PWD/../zlib -lz
第一部分 ( -L$$PWD/../zlib
) 表示包含库的文件夹位于../zlib
,这应该是正确的,因为zlib
它是 的同级文件夹src
。第二部分 ( -lz
) 表示库的名称是z
. 链接器由此推断该库实际上位于文件中libz.a
。
完毕
此时,您可能必须通过执行make distclean
. 但是从那里您应该能够使用包含的 3rd 方库构建您的项目,方法是转到您的基本目录并qmake
运行make
.
cd ~/myApp
qmake -r
make
注意:非常感谢 @LaszloPapp 让这个过程开始。这个答案的大部分原始资料来自他的回答。