说明:本文内容引自《C++GUI Qt4编程(第2版)》
布兰切特 (Jasmin Blanchette) (作者), 萨默菲尔德 (Mark Summerfield) (作者), 闫锋欣 (译者), 曾泉人 (译者), 张志强 (译者)
本文并非也无意用于任何形式的商业目的。转载请不要遗失以上的著作信息。
Qt 工程文件主要分为三种:
app(单独的应用程序)、lib(静态和动态库)和 subdirs(递归编译)。工程文件的类型可以使用 TEMPLATE 变量指定如下:
TEMPLATE = lib
Subdirs 模版可以用来编译子目录里的目标文件。在这种情况下,除 TEMPLATE = subdirs 外还需要指定 SUBDIRS 变量。在每个子目录中,qmake 会搜寻以目录名命名的.pro文件,并且会编译该工程。
如果没有 TEMPLATE 这一项,那么默认工程是 app。对于 app 或者 lib 工程,最常用的变量是下面这些:
1、HEADERS 指定工程的 C++ 头文件
2、SOURCES 指定工程的 C++ 实现文件
3、FORMS 指定需要 uic 处理的由 Qt 设计师生成的 .ui 文件
4、RESOURCES 指定需要 rcc 处理的 .qrc 文件
5、DEFINES 指定预定义的 C++ 预处理器符号
6、INCLUDEPATH 指定 C++ 编译器搜索全局头文件路径
7、LIBS 指定工程要链接的库。库既可以通过绝对路径指定,也可以使用源自 UNIX 的 -L 和 -l 标识符来指定(例如,-L/user/local/lib 和 -ldb_cxx)
8、CONFIG 指定各种用于工程配置和编译的参数
9、QT 指定工程所要使用的 Qt 模块(默认的是 core gui,对应于 QtCore 和 QtGui 模块)
10、VERSION 指定目标库的版本号
11、TARGET 指定可执行文件或库的基本文件名,其中不包含任何的扩展、前缀或版本号(默认的是当前的目录名)
12、DESTDIR 指定可执行文件放置目录
13、DLLDESTDIR 指定目标库文件放置的目录
CONFIG 变量用来控制编译过程中的各个方面。它支持的参数有:
(1) debug 是指编译具有调试信息的可执行文件或库,链接调试版的 Qt 库。
(2) release 是指编译不具有调试信息的可执行文件和或库,链接发行版的 Qt 库。如果同时制定 debug 和 release,则 debug 有效。
(3) warn_off 会关闭大量的警告。默认情况下,警告的状态是打开的。
(4) qt 是指应用程序或库使用 Qt。这一选项是默认包括的。
(5) dll 是指动态编译库。
(6) staticlib 是指静态编译库。
(7) plugin 是指编译一个插件。插件总是动态库,因此这一参数暗指 dll 参数。
(8) console 是指应用程序需要写控制台(使用 cout,cerr,qWarning(),等等)。
(9) app_bundle 只适用于 Mac OS X 编译,是指可执行文件被放到束中,这是 Mac OS X 的默认情况。
(10)lib_bundle 只适用于 Mac OS X 编译,指库被放到框架中。
要生成工程文件 toby.pro 的 makefile,可以输入:
qmake toby.pro
在这之后,可以调用 make 或 nmake 编译工程。通过键入以下命令,可以使用 qmake 生成一个 Microsoft Visual Studio 工程(.dsp或.vproj)文件:
qmake–tp vc toby.pro
在 Mac OS X 系统上,可以创建一个 XCode 工程文件:
qmake–spec macx-xcode toby.pro
要创建 makefile,可以输入:
qmake–spec macx-g++ toby.pro
这里的 -spec 命令行参数可以用来指定平台/编译器的组合。通常,qmake 可以正确地检测到所在的平台,但在某些情况下则有必要显式地指定平台情况。例如,在 Linux 上以 64 位模式调用 Intel C++ 编译器(ICC)生成 makefile,应当输入:
qmake–spec linux-icc-64 toby.pro
那些可用的规则在 Qt 的 mkspecs 目录中。
尽管 qmake 的主要目的是生成 .pro 文件的 makefile,但也可以使用 -project 参数在当前目录下使用 qmake 生成 .pro 文件,例如:
qmake–project
在这种模式下,qmake 将搜索当前目录下已知扩展名(.h、.cpp、.ui,等等)的文件,生成一个列举这些文件的 .pro 文件。
Pro 文件的注释以井号(#)开头,在行尾处结束。
有时可能需要在 .pro 文件中指定包含空格的文件名。在这种情况下,只需要简单地把文件名用引号括起来即可。
当在不同的平台上编译工程时,可能有必要基于平台指定不同的文件或者不同的参数。 qmake 的条件判断语法是:
condition{
then-case
}else{
else-case
}
Condition 部分可以是平台名字(例如,win32、unix 或者 macx),或者更复杂的断言。then-case 和 else-case 部分使用标准语法为变量赋值。例如:
win32{
SOURCES+= serial_win.cpp
}else{
SOURCES += serial_unix.cpp
}
else 分支是可选的。为了方便,当 then-case 部分仅有一条变量赋值,而且在没有 else-case 分支时,qmake 也支持单行形式的语法:
condition:then-case
例如:
macx:serial_mac.cpp
如果有几个工程文件需要共享相同的项,则可以把相同的项提取到单独的文件中,在各自的 .pro 文件中使用 include() 语句包含它们:
include(../common.pri)
HEADERS+= toby.h
SOURCES+= main.cpp \
toby.cpp
通常,打算被别的工程文件所包含的工程文件会带有 .pri(工程包含)的扩展名。
网友评论