QT .pro文件简单介绍
参考:https://www.cnblogs.com/Braveliu/p/5107550.html
本章使用QT 5.13 + Qt Creator 4.10.
一、.pro文件中qmake变量分析
新建一个Qt Widgets Application工程,打开.pro文件,5.13版本的pro文件中增加了一些qmake变量。
QT += core gui #库模块 使用core和gui模块 greaterThan(QT_MAJOR_VERSION, 4): QT += widgets #如果QT版本大于4 增加widgets模块 CONFIG += c++11 #支持C++11 # The following define makes your compiler emit warnings if you use # any Qt feature that has been marked deprecated (the exact warnings # depend on your compiler). Please consult the documentation of the # deprecated API in order to know how to port your code away from it. DEFINES += QT_DEPRECATED_WARNINGS # You can also make your code fail to compile if it uses deprecated APIs. # In order to do so, uncomment the following line. # You can also select to disable deprecated APIs only up to a certain version of Qt. #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 SOURCES += \ main.cpp \ mainwindow.cpp #指定多个源文件 HEADERS += \ mainwindow.h #指定头文件 FORMS += \ mainwindow.ui #工程中的ui设计文件 # Default rules for deployment. qnx: target.path = /tmp/$${TARGET}/bin else: unix:!android: target.path = /opt/$${TARGET}/bin !isEmpty(target.path): INSTALLS += target
#以上三行指定在不同平台生成文件的路径,如果不存在,生成target文件夹
二、变量详细分析
2.1 模板变量 TEMPLATE
模板变量告诉qmake这个应用程序具体生成哪种makefile。下面是模板变量可供选择的值:
- app 模板变量的默认值。建立一个应用程序的makefile。
- lib 建立一个库的makefile。
- vcapp 建立一个应用程序的Visual Studio项目文件。
- vclib 建立一个库的VisualStudio项目文件。
- subdirs 这是一个特殊的模板,它可以创建一个能够进入特定目录且为一个项目文件生成makefile,还能为它再调用make的makefile。
由以上分析可知,模板变量值不同,生成的makefile文件也会随之改变。那么,默认的也是最常用的app值。
2.1.1 app模板
使用app模板时,可以设置下列变量值
- HEADERS - 应用程序中的所有头文件的列表。
- SOURCES - 应用程序中的所有源文件的列表。
- FORMS - 应用程序中的所有.ui文件(由Qt设计器生成)的列表。
- LEXSOURCES - 应用程序中的所有lex源文件的列表。
- YACCSOURCES - 应用程序中的所有yacc源文件的列表。
- TARGET - 可执行应用程序的名称。默认值为项目文件的名称。(如果需要扩展名,会被自动加上。)
- DESTDIR - 放置可执行程序目标的目录。
- DEFINES - 应用程序所需的额外的预处理程序定义的列表。
- INCLUDEPATH - 应用程序所需的额外的包含路径的列表。
- DEPENDPATH - 应用程序所依赖的搜索路径。
- VPATH - 寻找补充文件的搜索路径。
- DEF_FILE - 只有Windows需要:应用程序所要连接的.def文件。
- RC_FILE - 只有Windows需要:应用程序的资源文件。
- RES_FILE - 只有Windows需要:应用程序所要连接的资源文件。
2.1.2 lib模板
lib模板告诉qmake为建立一个库而生成一个makefile。当使用这个模板时,除了app模板中提到的系统变量外,还有一个VERSION是被支持的。
你需要在为库指定特定信息的.pro文件中使用它们。
- VERSION - 目标库的版本号。比如,2.3.1。
2.1.3 subdirs模板
subdirs模板告诉qmake生成一个makefile,它可以进入到特定子目录并为这个目录中的项目文件生成makefile并且为它调用make。
在这个模板中只有一个系统变量SUBDIRS可以被识别。这个变量中包含了所要处理的含有项目文件的子目录的列表。这个项目文件的名称是和子目录同名的,这样qmake就可以发现它。
例如,如果子目里是“myapp”,那么在这个目录中的项目文件应该被叫做myapp.pro。
2.2 配置变量 CONFIG
配置变量CONFIG 指定了编译器所要使用的选项和所需要被连接的库。配置变量中可以添加任何东西,但只有下面这些选项可以被qmake识别。
2.2.1 控制编译器
下面这些选项控制着使用哪些编译器标志:
- release - 应用程序将以release模式连编。如果“debug”被指定,它将被忽略。
- debug - 应用程序将以debug模式连编(与release互斥)。
- debug_and_release - 工程同时用调试和发布模式编译。
- build_all - 如果指定是debug_and_release模式,工程默认是同时用调试和发布模式编译。
- ordered - 使用subdirs模板时,本选项指定了子目录应该按照给出的顺序编译。
- warn_on - 编译器会输出尽可能多的警告信息。如果“warn_off”被指定,它将被忽略。
- warn_off - 编译器会输出尽可能少的警告信息(与warn_on互斥)。
2.2.2 连编类型
下面这些选项定义了所要连编的库/应用程序的类型:
- qt - 应用程序是一个Qt应用程序,并且Qt库将会被链接。
- thread - 应用程序是一个多线程应用程序。
- x11 - 应用程序是一个X11应用程序或库。
- windows - 只用于“app”模板:应用程序是一个Windows下的窗口应用程序。
- console - 只用于“app”模板:应用程序是一个Windows下的控制台应用程序。
- dll - 只用于“lib”模板:库是一个共享库(dll)。
- staticlib - 只用于“lib”模板:库是一个静态库。
- plugin - 只用于“lib”模板:库是一个插件,这将会使dll选项生效。
注:模板变量和配置变量之间不能有冲突,否则生成的文件无法使用。
2.2.3 CONFIG控制编译器设置语法
CONFIG可以同时设置release和debug,但只CONFIG += debug_and_release
CONFIG += build_all #或者 CONFIG += debug_and_release CONFIG(debug,debug|release){ TARGET = proDemod } else { TARGET = proDemo }
CONFIG()的两个参数,第一个判断active的选项,第二个是互斥的选项的集合。
2.3 QT库模块
如果CONFIG变量值中包含了qt这个值,qmake支持了qt的程序(因为qmake也可以用在非qt程序的编译)这就要调整一些你程序中使用的qt的模块,而QT变量,正是达到这个目的的。QT是用来声明使用到的一些额外的模块,例如:通过下面的方法使得xml模块有效:
CONFIG += qt
QT += xml
QT 变量默认时包含core和gui模块的。如果不需要gui模块,可以使用 -= 删除gui模块
QT可以使用的选项如下:
core | QtCore module 核心模块 |
gui | QtGui module 界面模块 |
network | QtNetwork module 支持网络模块 |
opengl | QtOpenGL module 支持opengl图像编程 |
sql | QtSql module 支持sql数据库驱动 |
svg | QtSvg module 支持svg矢量图形 |
xml | QtXml module 支持xml模块 |
qt3support | Qt3Support module 支持qt3类 |