在Qt中,项目文件.pro 文件,是项目使用的配置文件,qmake依赖这个文件组织、加载各种依赖项,并定义了如何构建你的Qt应用程序或库,通过该文件指定项目的源文件、头文件、库依赖、配置选项等。
使用qt creator 创建一个工程,会默认生成一个.pro文件,其格式如下:
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
CONFIG += c++17
# You can make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
#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
# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target
以上是 .pro 配置文件中默认包含的内容;其中:
#号是注释符号;
项目的配置信息,如:QT += core gui、SOURCES += main.cpp mainwindow.cpp, 配置信息由三部分构成:关键字_操作符_值; 开头部分为:关键字,也称配置项,用来指明配置信息的含义;中间部分为操作符,包含: +=、-=、= ,操作符号连接关键字和对应的值;结尾部分:是配置项对应的值,一个配置项可以对应多个值。
例如在 QT += core gui中,Qt是配置项,core和gui是该配置项的值,中间用+=符号连接。
下表为常用的配置项:
配置项 | 含义 |
QT | 指定项目中用到的所有模块,默认值为 core 和 gui,中间用 += 符号连接。 |
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets | 如果 QT 版本大于 4(Qt5 或更高版本),则需要添加 widgets 模块,该模块包含所有控件类。 |
TARGET | 项目编译生成目标的名字。 |
TEMPLATE | 工程的类型,默认为可执行程序app。可以为:app、lib(库)、subdirs(多级目录管理)等 |
DESTDIR | 生成目标的路径 |
DEPENDPATH | 工程的依赖路径 。指定查看解决依赖关系的目录列表,当包含文件时使用。 |
SOURCES | 指定项目中包含的所有 .cpp 源文件。 |
HEADERS | 指定项目中包含的所有 .h 头文件。 |
FORMS | 指定项目要用到的ui文件(ui文件时用QT设计器生成的)。 |
LIBS | 加载动态库文件。 |
INCLUDEPATH | 指定项目要用到的头文件路径。 |
CONFIG | 指定编译器选项和项目配置,值由qmake内部识别并具有特殊意义。告诉qmake应用程序的配置信息:这个变量可以用来指定是生成debug模式还是release模式,也可以都生成;也可以用来打开编译器警告(warn_on输出尽可能多的警告信息)或者关闭(warn_off -编译器会输出尽可能少的警告信息);还可以用来配置要Qt加载库,例如如果要用到Qt的多线程,则:CONFIG+=qt thread再例如配置debug或release模式。 |
UI_DIR | UI文件编译后存放的位置;在项目构建过程中,ui文件通过uic.exe处理后,生成后缀为.h或.cpp的文件。因为C++编译器并不能识别QT的ui文件,所有要通过uic工具解析用户界面文件,生成对应的C++文件。 |
RCC_DIR | 资源文件编译后存放的位置,在项目构建过程中,资源文件通过rcc.exe处理后,生成后缀为.cpp的文件。为什么要这样处理呢?因为资源文件并不能被C++编译器所识别,rcc.exe是Qt工具链中的一个工具,用于将资源文件编译为用于访问这些资源的C++代码,它会将资源文件转换为一个.cpp文件,其中包含了资源数据的定义和访问函数。这个生成的.cpp文件可以在应用程序的构建过程中被编译,生成一个二进制的.o目标文件,并最终链接到应用程序中。 |
MOC_DIR | MOC命令将含Q_OBJECT的头文件转换为标准的头文件存放的目录。 在项目构建过程中,如果包含的有QObject派生类、Q_OBJECT宏等元对象相关的代码,moc.exe会对这些文件进行处理,输出一个新的C++源代码文件,其中包含清单QObject类和元对象的所有信息,生成的文件一般以.moc为后缀,存放于此处定义的路径。 |
OBJECTS_DIR | 存放编译中间产物(object文件)的目录,生成编译中间产物的过程是通过多个工具和可执行文件完成的, 其中包括编译器(gcc、clang等)和链接器(MSVC、Id等),但没有一个特定.exe在全部过程中负责处理。 生成编译中间产物的过程是为了将源代码转化为可执行文件或库文件。这个过程涉及编译源代码、处理元对象代码以及链接生成的目标文件和库文件,最终生成可以在计算机上运行的可执行文件或库文件。 |
DEFINES | 应用程序所需的额外的预处理程序定义的列表。qmake添加这个变量的值作为编译器C预处理器宏(-D选项); 比如 DEFINES += xxx,如同在程序中添加了 #define xxx 语句。 |
TRASHLATIONS | 加载要用到的语言翻译*.ts文件 。 |
RESOURCES | 加载要用到的资源*.qrc文件 |
.pro配置跨平台信息 win32:xxx win32 {} | QT是跨平台的,在不同的平台上用同一个pro文件,要加入平台相关的变量。windows平台win32,Linux平台linux; linux:LIBS += $$PWD/xxx/linux/xxx.so, ($$PWD 是pro所在目录,是相对目录,建议用相对目录)
|
CONFIG对应的值主要有:
选项 | 说明 |
release | 项目以release模式构建。如果也指定了debug,那么最后一个生效。 |
debug | 项目以debug模式构建。 |
debug_and_release | 项目准备以debug和release两种模式构建。 |
debug_and_release_target | 此选项默认设置。如果也指定了debug_and_release,最终的debug和release构建在不同的目录。 |
build_all | 如果指定了debug_and_release,默认情况下,该项目会构建为debug和release模式。 |
autogen_precompile_source | 自动生成一个.cpp文件,包含在.pro中指定的预编译头文件。 |
ordered | 使用subdirs模板时,此选项指定应该按照目录列表的顺序处理它们。 |
precompile_header | 可以在项目中使用预编译头文件的支持。 |
warn_on | 编译器应该输出尽可能多的警告。如果也指定了warn_off,最后一个生效。 |
warn_off | 编译器应该输出尽可能少的警告。 |
exceptions | 启用异常支持。默认设置。 |
exceptions_off | 禁用异常支持。 |
rtti | 启用RTTI支持。默认情况下,使用编译器默认。 |
rtti_off | 禁用RTTI支持。默认情况下,使用编译器默认。 |
stl | 启用STL支持。默认情况下,使用编译器默认。 |
stl_off | 禁用STL支持。默认情况下,使用编译器默认。 |
thread | 启用线程支持。当CONFIG包括qt时启用,这是缺省设置。 |
c++11 | 启用c++11支持。如果编译器不支持c++11这个选项,没有影响。默认情况下,支持是禁用的。 |
c++14 | 启用c++14支持。如果编译器不支持c++14这个选项,没有影响。默认情况下,支持是禁用的。 |
以上为 QT 项目配置文件.pro文件常用的配置项,持续更新中...