资源预览内容
第1页 / 共8页
第2页 / 共8页
第3页 / 共8页
第4页 / 共8页
第5页 / 共8页
第6页 / 共8页
第7页 / 共8页
第8页 / 共8页
亲,该文档总共8页全部预览完了,如果喜欢就下载吧!
资源描述
Qt的.pro工程文件语法学习标签:proqmake语法2016-01-15 12:25171人阅读评论(0)收藏举报分类:Qt5(6)版权声明:本文为博主原创文章,未经博主允许不得转载。我们编写Qt应用程序时,不管使用Qt Creator还是VS或者Eclipse,不管是Qt Widgets还是Qt Quick,总会发现有.pro文件,我们称.pro文件为Qt的工程管理文件,它存在的目的是列举工程中包含的源文件。类似于makefile,一个工程中可以包含一个或多个.pro文件。因此对于使用Qt的开发人员来说,熟悉.pro工程文件的语法,懂得阅读和修改.pro文件,将有利于对项目工程的文件组织和管理。qmake、.pro文件、makefile文件的关系简单来说就是:qmake工具使用了与平台无关的.pro文件生成与平台相关的makefile文件。所以虽然本文标题为.pro文件语法学习,实际上应该是qmake的语法学习,但是因为IDE把qmake隐藏起来了,我们接触地更多的是.pro文件,因此还是使用这样的标题。=TARGET变量 & TEMPLATE变量 & CONFIG变量:首先我们需要知道工程文件主要分为三种:app(单独的应用程序)、lib(静态或动态库)和subdirs(递归编译)。工程文件的类型可以使用TEMPLATE变量来指定。TARGET是用来定义应用程序的名字的,而程序的扩展名则由TEMPLATE来定义。例如:TARGET = hello,TEMPLATE = app,则在Linux下会生成hello(无后缀的ELF可执行文件),对应的在Windows下会生成hello.exe。TEMPLATE和CONFIG共同定义了目标类型,以下是几种常见情况: TEMPLATE = app,生成标准程序(注意如果没有TEMPLATE这一项,那么默认工程就是app)。 TEMPLATE = subdirs,子项目工程模板,可以用它来创建一个能够进入特定目录并且编译子目录里的目标文件。此时除了TEMPLATE = subdirs,还需要指定SUBDIRS变量,在每个子目录中,qmake会搜寻以目录命名的.pro文件,并且会编译该工程。 TEMPLATE = lib,生成库文件,若不指定CONFIG变量,则编译为共享库;若CONFIG += staticlib,则编译为静态库;若CONFIG += plugin,则编译为插件(插件总是动态库)。对于app或者lib工程,以下是较常使用的一些变量: TARGET变量:指定可执行文件或库的基本文件名,其中不包含任何的扩展、前缀或版本号。(默认的是当前的目录名) CONFIG变量:指定各种用于工程配置和编译的参数 HEADERS变量:指定工程的C+头文件(.h) SOURCES变量:指定工程的C+实现文件(.cpp) FORMS变量:指定需要uic处理的由Qt设计师生成的.ui文件 RESOURCES变量:指定需要rcc处理的.qrc文件(资源文件) LEXSOURCES变量:指定工程的lex源文件(.l) YACCSOURCES变量:指定工程中的yacc源文件(.y) DEFINES变量:指定预定义的C+预处理器符号 INCLUDEPATH变量:指定C+编译器搜索全局头文件的路径 LIBS变量:指定工程要链接的库。库既可以通过绝对路径指定,也可以使用源自Unix的-L和-l标识符来指定(例如:-L/usr/local/lib和-ldb_cxx) QT变量:指定工程所要使用的Qt模块(默认的是core gui,对应于QtCore和QtGui模块) VERSION变量:指定目标库的版本号 DESTDIR变量:指定生成的可执行文件放置的目录。(默认值是平台相关的,例如在Linux上,值当前目录;在Windows上,则是指debug或release子目录) DLLDESTDIR变量:指定目标库文件放置的目录(默认与DESTDIR相同) OBJECTS_DIR变量:指定目标文件(.o文件)的存放目录.pro文件中的注释:注释以井号(#)开头,在行尾处结束。.pro文件中的一个条目的语法通常具有如下形式:variable = values 1 1values是字符串的列表,例如:CONFIG = qt release warn_off,是指将列表 “qt”, “release”, “warn_off” 赋给CONFIG变量,注意!它会覆盖CONFIG变量以前设置的各个值。因此我们通常用 += 操作符来扩展变量的值。如:CONFIG = qtCONFIG += releaseCONFIG += warn_off 1 2 3 1 2 3同样,我们也可以用 -= 操作符从当前的变量中移除任意的指定值。如:CONFIG = qt release warn_offCONFIG -= qt 1 2 1 2会使CONFIG变量的值变成 “release”, “warn_off”。另外还有= 操作符和 = 操作符。= 操作符在一个变量上添加一个值,但要求被添加的值不在变量的列表上,否则将不做任何事情。例如:SOURCE *= main.cpp 1 1这一行将把main.cpp文件添加到工程中,只有当它还没有被添加的情况下才会添加。最后,= 操作符使用指定的值替换符合正则表达式的值,这是sed的语法。例如:SOURCES = s/.cppb/.cxx/ 1 1使用.cxx替换SOURCES变量中所有.cpp文件的扩展名。除了使用qmake定义的标准变量外,我们也可以设置任意变量和值,并且可以使用$varName 或者$varName 语法引用它。例如:MY_VERSION = 2.0TARGET = Hello_$MY_VERSION 1 2 1 2使用$PWD 可以获取当前文件所在的目录路径。使用内置函数$lower() 可以把字符串转换为小写。而内置函数$system() 允许我们从外部应用程序中产生字符串,例如想要确认当前的UNIX版本,可以这样写:OS_VERSION = $system(uname -r) 1 1然后,可以在条件中使用结果变量,并与contains()合用:contains(OS_VERSION, SunOS): SOURCES += mythread_sun.c 1 1有时候可能需要在.pro文件中指定包含空格的文件名。在这种情况下,只需要简单地把文件名用引号括起来即可。当在不同平台上编译工程时,可能有必要基于平台指定不同的文件或者不同的参数。qmake的条件判断语法是:condition then-case else else-case 1 2 3 4 5 1 2 3 4 5condition部分可以是平台名字(例如:win32、unix或者macx),或者更复杂的断言。then-case和else-case部分使用标准语法为变量赋值。例如:win32 SOURCES += serial_win.cpp else SOURCES += serial_unix.cpp 1 2 3 4 5 1 2 3 4 5else分支是可选的。为了方便,当then-case部分仅有一条变量赋值,而且在没有else-case分支时,qmake也支持单行形式的语法。例如:macx: SOURCES += serial_mac.cpp 1 1如果有几个工程文件需要共享相同的项,则可以把相同的项提取到单独的文件中,在各自的.pro文件中使用include()语句包含它们。例如:include(./common.pri) 1 1通常,打算被别的工程文件所包含的工程文件会带有.pri(工程包含)的扩展名。=我们这里提到的一些qmake常用语法,但相对于强大的qmake工具本身提供参数和特性,本文也只是冰山一角,因此如果想对qmake作更多了解,可以参考qmake指南的在线帮助文档。
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号