返回顶部

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类

 

 

 

 

 

 

 

 

 

 

posted @ 2020-10-09 16:59  Zoya23  阅读(392)  评论(0编辑  收藏  举报