Qt中pro项目文件说明

一、模板变量 TEMPLATE

1.1模板变量介绍

模板变量作用告诉qmake为这个应用程序具体生成哪种makefile。下面是模板变量可供选择的值:

模板说明
app模板变量的默认值,建立一个应用程序的makefile。
aux创建一个不建任何东西的Makefile。如果没有编译器需要被调用来创建目标,比如你的项目使用解释型语言写的,使用此功能。注:此模板类型只能用于Makefile-based生成器。特别是,它不会工作在vcxproj和Xcode生成器。
lib建立一个库的makefile。
vcapp建立一个应用程序的Visual Studio项目文件。
vclib建立一个库的Visual Studio项目文件。
subdirs这是一个特殊的模板,它可以创建一个能够进入特定目录且为一个项目文件生成makefile,还能为它再调用make的makefile。
1.1.1 app模板

app模板告诉qmake为建立一个应用程序生成一个makefile。当使用这个模板时,设置下面这些qmake系统变量值是有效的。可以在.pro文件中使用它们为你的应用程序指定特定信息。

变量说明
DEFINES应用程序所需的额外的预处理程序定义的列表。
DEF_FILE只有Windows需要:应用程序所要连接的.def文件。
DEPENDPATH应用程序所依赖的搜索路径。
DESTDIR放置可执行程序目标的目录。
FORMS应用程序中的所有.ui文件(由Qt设计器生成)的列表。
HEADERS应用程序中的所有头文件的列表。
INCLUDEPATH应用程序所需的额外的包含路径的列表。
LEXSOURCES应用程序中的所有lex源文件的列表。
RC_FILE只有Windows需要:应用程序的资源文件。
RES_FILE只有Windows需要:应用程序所要连接的资源文件。
SOURCES应用程序中的所有源文件的列表。
TARGET可执行应用程序的名称。默认值为项目文件的名称。(如果需要扩展名,会被自动加上。)
VPATH寻找补充文件的搜索路径。
YACCSOURCES应用程序中的所有yacc源文件的列表。

你只需要使用那些你已经有值的系统变量。例如,如果你不需要任何额外的INCLUDEPATH,那么你就不需要指定它,qmake会为所需的系统变量提供默认值。
例如:

#应用程序名称
TARGET = helloworld

#Makefile模板为应用程序
TEMPLATE = app

#应用程序中源文件列表
SOURCES += main.cpp\
        hellodialog.cpp
 
 #应用程序中头文件列表       
HEADERS  += hellodialog.h

#应用程序中ui文件列表
FORMS    += hellodialog.ui

#应用程序中资源文件列表
RC_FILE  += myico.rc

 #测试功能宏开关
 DEFINES += QT_NO_TEST_BTN

注意:如果条目是单值的,比如TARGET、TEMPLATE,我们是用“=”,但如果是多值条目,我们使用“+=”来为这个变量添加现有的条目值。
使用“=”会用新值替换原有的值。例如,如果我们写了DEFINES= QT_NO_TEST_BTN,其它DEFINES所有的条目值都将被删除并用QT_NO_TEST_BTN替代。

1.1.2 aux模板

创建一个不建任何东西的Makefile。如果没有编译器需要被调用来创建目标,比如你的项目使用解释型语言写的,使用此功能。注:此模板类型只能用于Makefile-based生成器。特别是,它不会工作在vcxproj和Xcode生成器。

1.1.3 lib模板

lib模板告诉qmake为建立一个库而生成一个makefile。当使用这个模板时,除了app模板中提到的系统变量外,还有一个VERSION是被支持的。
你需要在为库指定特定信息的.pro文件中使用它们。VERSION - 目标库的版本号。

1.1.4 vcapp模板

建立一个应用程序的Visual Studio项目文件。

1.1.5 vlib模板

建立一个库的Visual Studio项目文件。

1.1.6 subdirs模板

subdirs模板告诉qmake生成一个makefile,它可以进入到特定子目录并为这个目录中的项目文件生成makefile并且为它调用make。在这个模板中只有一个系统变量SUBDIRS可以被识别。这个变量中包含了所要处理的含有项目文件的子目录的列表。这个项目文件的名称是和子目录同名的,这样qmake就可以发现它。

二、配置变量CONFIG

2.1配置变量介绍

config为配置变量,指定了编译器所要使用的选项和所需要被连接的库。下面这些选项可以被构建工具qmake识别。

2.2控制编译器的选项

下面这些选项控制着使用哪些编译器标志:

选项意义
autogen_precompile_source自动生成一个.cpp文件,包含在.pro中指定的预编译头文件中。
build_all如果指定是debug_and_release模式,工程默认是同时用调试和发布模式编译。
c++11启用c++11支持。
c++14启用c++14支持。
debug应用程序将以debug模式连编(与release互斥)。
debug_and_release工程同时用调试和发布模式编译。
debug_and_release_target此选项默认设置。如果也指定了debug_and_release,最终的debug和release构建在不同的目录。
exceptions启用异常支持。默认设置。
exceptions_off禁用异常支持。
ordered使用subdirs模板时,本选项指定了子目录应该按照给出的顺序编译。
precompile_header可以在项目中使用预编译头文件的支持。
release应用程序将以release模式连编。如果“debug”被指定,它将被忽略。
rtti启用RTTI支持。
rtti_off禁用RTTI支持。
stl启用STL支持。
stl_off禁用STL支持。
warn_on编译器会输出尽可能多的警告信息。如果“warn_off”被指定,它将被忽略。
warn_off编译器会输出尽可能少的警告信息(与warn_on互斥)。
2.3 连编类型

下面这些选项定义了所要连编的库/应用程序的类型:

选项说明
console只用于app模板,应用程序是一个windows下的控制台应用程序。
dll只用于lib模板,库是一个共享库(dll)。
plugin只用于lib模板,库是一个插件,这将会使dll生效。
qt应用程序是一个Qt程序,并且Qt库将被链接。
staticlib只用于lib模板,库是一个静态库。
thread应用程序是一个多线程应用程序,当CONFIG包括qt时启用,这是缺省设置。
x11应用程序是一个x11的应用程序或库。
windows只用于app模板,应用程序是一个windows下的窗口应用程序。

例如,如果你的应用程序使用Qt库,并且你想把它连编为一个可调试的多线程的应用程序,你的项目文件应该会有下面这行:

CONFIG += qt thread debug

注意:你必须使用“+=”,不要使用“=”,否则qmake就不能正确使用连编Qt的设置了。

2.4 声明Qt库模块

下面的罗列显示了QT变量可以使用的选项,并解释了相应的特点:

选项说明
core (included by default)QtCore module 核心模块
gui (included by default)QtGui module 界面模块
networkQtNetwork module 支持网络模块
openglQtOpenGL module 支持opengl图像编程
sqlQtSql module 支持sql数据库驱动
svgQtSvg module 支持svg矢量图形
xmlQtXml module 支持xml模块
qt3supportQt3Support module 支持qt3类

注意:添加opengl到QT变量里面,等价于往CONFIG变量里面添加。

所以对于Qt应用程序来说,没必要同时往QT变量和CONFIG变量里面添加opengl选项。

例如:
QT -= gui
使得该项目中不包含gui模块。

QT += core gui
在项目中添加core模块和gui模块。默认情况下,QT包含core和gui,以确保标准的GUI应用程序无需进一步的配置就可以构建。core模块中包含了非图形界面的核心功能,具体可以参考qt类图;gui模块扩展了core模块的图形界面功能。换句话说就是,如果项目涉及到图形界面的程序,则需要添加gui,如果不涉及图形界面程序则不需要添加gui。
PS:模块即很多相关类的集合

QT += sql xml
在项目中添加sql模块和xml模块。sql模块中包含了数据库相关的类;xml模块中包含了xml相关的类。
PS:一行中可以添加多个模块,只需空格隔开。

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
兼容Qt5需要添加该行代码。

2.5 关于 CONFIG(debug, debug|release)语法

CONFIG变量可以同时定义 debug 和 release,但只有一个处于active(当两个互斥的值都出现时,最后设置的处于active状态)
例如:

CONFIG(debug, debug|release){
    #debug版本配置
    MOC_DIR = $${BUILDDIR}/debug/moc
    RCC_DIR = $${BUILDDIR}/debug/rcc
    UI_DIR =  $${BUILDDIR}/debug/ui
    OBJECTS_DIR = $${BUILDDIR}/debug/obj
} else {
    #release版本配置
    MOC_DIR = $${BUILDDIR}/release/moc
    RCC_DIR = $${BUILDDIR}/release/rcc
    UI_DIR = $${BUILDDIR}/release/ui
    OBJECTS_DIR = $${BUILDDIR}/release/obj

    #测试功能宏开关
    DEFINES += QT_NO_TEST_BTN
}

注意:可以通过在其它任何一个变量的变量名前加$$来把这个变量的值分配给当前的变量。

三、链接到库列表

LIBS
指定链接到项目中的库列表。如果使用Unix -l (library) 和 -L (library path) 标志,在Windows上qmake正确处理库(也就是说,将库的完整路径传递给链接器),库必须存在,qmake会寻找-l指定的库所在的目录。

例如:

unix:LIBS += -L"/opt/qt-4.7.1-SBC/lib" -lqwt
win32:LIBS += c:/mylibs/math.lib

注意:如果路径包含空格,需要使用引号包含路径。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值