Qt 的.pro文件配置详解
一、简介
1、在Qt项目里,.pro文件是项目文件。
2、.pro文件用于配置Qt项目的构建过程。
3、配置.pro文件,实现对Qt工程全生命周期的控制,精准把控从编译优化到部署策略,是构建企业级Qt应用的必备核心技能。
二、基础配置
1、TEMPLATE
(1)、指定项目的模板类型。
(2)、常用的类型有:
a、app: 用于创建可执行应用程序。(一般.pro文件中未指定TEMPLATE,默认就是创建应用程序)
b、lib: 用于创建库文件,可细分为静态库和动态库。
1)、静态库:
TEMPLATE = lib
CONFIG += staticlib
2)、动态库:
TEMPLATE = lib
c、subdirs: 用于管理多个子项目(生成makefile文件编译SUBDIRS指定的子文件夹)。
1)、例如,TestSubDirs目录下,有两个子项目Project1和Project2(且子目录名和子项目文件同名),TestSubDirs.pro内容如下:
TEMPLATE = subdirs
SUBDIRS += \
Project1 \
Project2
2、TARGET
(1)、指定生成的目标文件的名称。
(2)、例如: TARGET = MyApp。
3、DESTDIR和DLLDESTDIR
(1)、DESTDIR指定目标文件(.dll、.lib、.pdb、.exp、.ilk)的构建目录,没有会自动生成。
(2)、DLLDESTDIR指定将目标文件(.dll)单独复制到的目录,没有会自动生成。
(3)、注意,若使用当前目录,则需测试当前目录是哪个目录,自测试当前目录"./"是makefile所在的目录。
4、VERSION
(1)、指定应用程序或库的版本号。
(2)、例如: VERSION = 1.0.0.0 。
(3)、右键点击应用程序exe或dll-->属性-->详细信息,看到文件版本和产品版本就变为了1.0.0.0。
5、DEFINES、DEFINES_DEBUG、DEFINES_RELEASE
(1)、DEFINES将此变量的值添加为编译器预处理器宏。
(2)、DEFINES_DEBUG定义Debug配置的预处理器宏。
(3)、DEFINES_RELEASE定义Release配置的预处理器宏。
(4)、例如,DEFINES += USE_MY_STUFF 。
6、QT
(1)、添加模块。
(2)、例如: QT += core gui widgets network 。
三、文件
1、HEADERS
(1)、列出项目中所有的头文件(.h)。
(2)、例如:
HEADERS += \
mainwindow.h
2、SOURCES
(1)、列出项目中所有的源文件(.cpp)。
(2)、例如:
SOURCES += \
main.cpp \
mainwindow.cpp
3、FORMS
(1)、列出项目中所有的ui文件(.ui)。
(2)、例如:
FORMS += \
mainwindow.ui
4、RESOURCES
(1)、列出项目中所有的资源文件(.qrc)。
(2)、例如:
RESOURCES += \
MyApp.qrc
5、resources.files
(1)、列出项目中所有的qml文件(.qml)。
(2)、例如: resources.files = main.qml ./qml/MyFirst.qml
(3)、注意,若向工程中添加自定义qml文件,会被增加到DISTFILES字段,如: DISTFILES += /qml/MyFirst.qml,但构建会报错,需要手动添加到resources.files中。
(4)、自定义QML文件名首字母要大写,以表明这是一个QML类型。
6、INCLUDEPATH
(1)、给编译器指明头文件的搜索路径,代码中#include时可以找到相应的文件。
(2)、例如: INCLUDEPATH += $$PWD/MyDll 。
7、LIBS
(1)、指定链接时库文件的搜索路径和要链接的库名。
(2)、例如: LIBS += -L$$PWD/MyDll -lMyDll
(3)、-L指定库文件的搜索路径; -l指定要链接的库名(不加.lib)。
四、其它
1、CONFIG
(1)、CONFIG指定了编译器所要使用的选项和所要连编的库。
(2)、以下是一些选项:
release
debug
debug_and_release
build_all
ordered
warn_on
warn_off
(3)、以下是一些连编的库:
qt
C++11、C++14、C++17、C++20
thread
x11
windows
console
dll
staticlib
plugin
qml_debug
(4)、用"+="、"-="来添加、去除包含。
(5)、CONFIG(debug, debug | release)
第一个参数是要判断的active选项,第二个参数是互斥选项的集合。
CONFIG可以同时定义debug和release,但只有一个处于active状态。
例如:
CONFIG(debug, debug | release) {
LIBS += -lopencv_core2413d
}
CONFIG(release, debug | release) {
LIBS += -lopencv_highgui241
}
2、平台条件判断
(1)、例如:
win32 {
SOURCES += windows_utils.cpp
}
unix:!macx {
SOURCES += linux_utils.cpp
}
macx {
SOURCES += mac_utils.cpp
}
(2)、以上是根据平台添加不同的文件
3、contains
(1)、contains用于检查某个字符串是否包含另一个字符串。
(2)、例如:
contains(QT, gui) {
message("Qt GUI module is enabled")
# 如果启用了Qt GUI模块,则执行这里的代码
} else {
message("Qt GUI module is not enabled")
}
4、exists
(1)、exists()函数可以检查某个文件或目录是否存在。
(2)、例如:
exists(path/to/debug_feature.h) {
HEADERS += path/to/debug_feature.h
SOURCES += path/to/debug_feature.cpp
} else {
message("Debug feature header not found.")
}