-
在前面Log4Qt 使用笔记(一)中,我们举例演示了Log4Qt的简单使用。在继续深入学习Log4Qt之前,我想似乎有必要简单整理一下qmake或者说Qt Creator下如何使用Log4Qt这些第三方库的。
本文标题取为:qmake下使用一例(以Log4Qt为例)可能会更好一点。想想还是就这样吧。
如何使用第三方库?
不少人使用第三方库时都是:
- 下载源码
- 找出必要的文件
- 然后添加进自己的工程
一般来说,我们可以将所有和这个库有关的东西放置到一个liblog4qt.pri这样的文件中,然后在需要使用的工程中直接包含这个文件即可:
比如:我们先看看,上一节中我所写例子所用的pro文件:
include(../../liblog4qt.pri) CONFIG += console DESTDIR = $$PROJECT_BINDIR SOURCES += main.cpp
有一点不同:这个文件背后,使用的不是直接包含文件,而是动态库。这也是本文的内容。
题外
-
注:在http://code.google.com/r/dbzhang800-qextserialport/这个第三方库中,我采用的另一种思路
可以采用下面三种方式来使用QextSerialPort:
静态库
动态库
直接包含源文件
不管使用哪种方式,使用时只需要在工程文件内添加
include(pathToPri/qextserialport.pri)
或许应该考虑将Log4Qt也改造成这种使用方式
-
注:本文或许算是qmake使用实践:包含动态库的Qt4工程一文的后续。
- 内容似乎太乱了,只好限定在:Windows下,这样可以省点代码
工程结构示例
一个简单的包含动态库且又使用第三方库的Qt程序,应该都可以这样来组织工程结构:
+
|-- myProject.pro
|-- apps\
| |-- hello.pro
| `-- main.cpp
|-- libA\
| |-- libA.pro
| |-- libA.pri
| `-- main.cpp
|-- libB\
| |-- libB.pro
| |-- libB.pri
| `-- main.cpp
...
|-- libLog4Qt
| |-- libLog4Qt.pro
| `-- libLog4Qt.pri
|
`-- 3rdparty\
|-- log4qt\
| `....
|-- qextserialport\
|-- `....
所有的第三方代码放置到3rdParty下。程序由一个可执行程序和若干个动态链接库构成(此处忽略了文档doc和单元测试tests相关的目录)
最终目的是:
- 执行make或者点击Qt Creator构建或运行时,所有这些东西都会自动生成。自动放置到合适的路径(windows下)或者设置合适的rpath(Linux下),(本文只考虑windows下)
- 不去动第三方库的代码。
使用Log4Qt
由于程序中包含很多动态库,而几乎每个动态库都需要使用log功能,此时直接包含Log4Qt的源码或者使用静态库都不是太好的注意。所以:使用动态库
其实只要写好工程文件,使用动态库也很简单:
| 创建libLog4Qt.pro | 用来构建动态库 | 可以单独存在,也可以被上级的pro文件所包含(通过subdir) |
| 创建libLog4Qt.pri | 用来构建和使用动态库 | 任何需要使用log工程的pro文件,只需要include该文件即可 |
不过这两个文件,乍看起来,可能会让人比较头大:(但如果所有的动态库都是这么弄,倒是很简单了)
libLog4Qt.pri
一开始定义几个变量:
- 我们下载的 log4qt 所放置的目录
- 我们的库文件准备放置到的路径(所有的动态库都需要这个,放置到单独一个common.pri中更好)
- 库文件的名字(使用了qtLibraryTarget,这样在windows下debug和release自动拥有不同的名字,而且对我们是透明的,因为我们只在这一个文件内指定库文件的名字。)
LOG4QTSRCPATH = $$PWD/../3rdparty/log4qt/src
PROJECT_LIBDIR = $$PWD/../lib
PROJECT_BINDIR = $$PWD/../bin
TEMPLATE += fakelib
LIBLOG4QT_NAME = $$qtLibraryTarget(hlog4qt)
TEMPLATE -= fakelib
INCLUDEPATH += $$LOG4QTSRCPATH
DEPENDPATH += $$LOG4QTSRCPATH
!log4qt-buildlib{
DEFINES += LOG4QT_IMPORTS
LIBS += -L$$PROJECT_LIBDIR -l$$LIBLOG4QT_NAME
}else{
DEFINES += LOG4QT_EXPORTS
INCLUDEPATH += -L$$PROJECT_LIBDIR $$LOG4QTSRCPATH/helpers \
$$LOG4QTSRCPATH/spi \
$$LOG4QTSRCPATH/varia
DEPENDPATH += $$LOG4QTSRCPATH/helpers \
$$LOG4QTSRCPATH/spi \
$$LOG4QTSRCPATH/varia
include($$LOG4QTSRCPATH/Log4Qt.pri)
}
无论是使用,还是构建动态库,我们都使用这个文件。
- 对于前者,只需要指定头文件目录,库文件名即可
-
对于后者,列出所有的源文件(由于它提供了Log4Qt.pri的文件,这儿就直接包含了)
liblog4qt.pro
这个文件中没有任何新东西,就是构建一个动态库
TEMPLATE = lib
CONFIG += log4qt-buildlib
QT += core xml network
include(liblog4qt.pri)
TARGET = $$LIBLOG4QT_NAME
DESTDIR = $$PROJECT_LIBDIR
win32{
DLLDESTDIR = $$PROJECT_BINDIR
QMAKE_DISTCLEAN += $$PROJECT_BINDIR/$${LIBLOG4QT_NAME}.dll
}
CONFIG += debug_and_release build_all
LOG4QT_VERSION_MAJOR = 1
LOG4QT_VERSION_MINOR = 0
LOG4QT_VERSION_RELEASE = 0
LOG4QT_VERSION = '\\"$${LOG4QT_VERSION_MAJOR}.$${LOG4QT_VERSION_MINOR}.$${LOG4QT_VERSION_RELEASE}\\"'
DEFINES += LOG4QT_VERSION_STR=\"$${LOG4QT_VERSION}\"
DEFINES += LOG4QT_VERSION=$${LOG4QT_VERSION}
VERSION = 1.0.0
DEPENDPATH += src src/helpers src/spisrc/ varia
INCLUDEPATH += src src/helpers src/spi src/varia
本文详细介绍了在qmake环境下如何使用Log4Qt第三方库,包括工程结构示例、如何包含动态库及使用第三方库的步骤。
7096

被折叠的 条评论
为什么被折叠?



