Qt pro 文件使用设置指南 【文摘】

说明:本文内容引自《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(工程包含)的扩展名。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,402评论 6 499
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,377评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,483评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,165评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,176评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,146评论 1 297
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,032评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,896评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,311评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,536评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,696评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,413评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,008评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,659评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,815评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,698评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,592评论 2 353

推荐阅读更多精彩内容

  • 在QT中,有一个工具qmake可以生成一个makefile文件,它是由.pro文件生成而来的,.pro文件的写法如...
    Feel君阅读 1,916评论 0 1
  • 注:首发地址 1. 前言 当在做 Android NDK 开发时,如果不熟悉用 CMake 来构建,读不懂 CMa...
    cfanr阅读 24,368评论 1 53
  • Ubuntu的发音 Ubuntu,源于非洲祖鲁人和科萨人的语言,发作 oo-boon-too 的音。了解发音是有意...
    萤火虫de梦阅读 99,256评论 9 467
  • Qt是属于一个跨平台的GUI开发软件,支持的平台有Unix、Linux、Windows/WinCE、IOS等。 Q...
    一叶之界阅读 8,162评论 0 17
  • makefile关系到整个工程的编译规则,一个工程中的源文件不计其数,按其类型、功能、模块分别放在若干的目录当中,...
    Joe_HUST阅读 1,879评论 0 3