1.pro文件的作用
QT工程的pro文件,在创建工程时由QTCreater自动创建,我们可以往里面添加内容,增加库文件的声明,包含路径、预处理器定义,生成目录,输出中间目录等等设置。
2.一个简单的示例
# QT 是一个模块的宏定义,后面的+= 表示引入 core和gui模块,
# 查阅其他模块请查阅资料:https://doc.qt.io/archives/qt-5.12/qtmodules.html
QT += core gui
# greaterThan函数是一个判断函数,可以认为是一个if(n1<n2)的代码
# QT_MAJOR_VERSION : 当前qt版本
# 以下代码逻辑为:判断当前qt版本是否大于4,如果大于4,QT加入 widgets 模块
# widgets模块是qt5以及qt5之后的版本,从 gui 模块分离出来的
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
# 配置,使用c++11标准
CONFIG += c++11
#如果使用以下定义,则编译器会发出警告,
#任何被标记为已弃用的Qt功能(确切的警告取决于您的编译器)。请查阅已弃用API,以便了解如何从中移植代码。
DEFINES += QT_DEPRECATED_WARNINGS
# 如果代码使用了不推荐使用的API,也可能导致代码编译失败。为此,请取消对以下行的注释。
#您还可以选择禁用不推荐使用的API,最高只能禁用特定版本的Qt。
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
# 代码文件,这将取决于项目栏中将如何展示你的结构,
# 当前工程中的C++源文件
SOURCES += \
main.cpp \
mainwindow.cpp
# 当前工程中的C++头文件
HEADERS += \
mainwindow.h
# 当前工程中的ui文件
FORMS += \
mainwindow.ui
# 以下为默认部署规则,意思是编译后指定make install后的文件路径
qnx: target.path = /tmp/$${TARGET}/bin # 如果是qnx系统使用/tmp/$${TARGET}/bin目录
else: unix:!android: target.path = /opt/$${TARGET}/bin # 其他系统则用/opt/$${TARGET}/bin目录
# target.path不为空,则将target 变量加入到 INSTALLS
# INSTALLS 表示指定make install后程序的目录
!isEmpty(target.path): INSTALLS += target
- QT:指定所要使用的Qt模块
- TARGET:指定编译后生成的目标文件名称
- TEMPLATE:指定编译后生成app 还是 lib
- DEFINES:预定义预处理器符号
- SOURCES:当前工程中的C++源文件
- HEADERS:当前工程中的C++头文件
- FORMS:当前工程中的ui文件
以上是一个简单的示例所用到的配置选项。还有一些常用的别的配置选项如下。
- VERSION:目标库版本号
- DESTDIR:指定最终文件生成的目录
- UI_DIR:UIC将ui转化为头文件所存放的目录
- RCC_DIR:RCC将qrc文件转化为头文件所存放的目录
- MOC_DIR:MOC命令将含Q_OBJECT的头文件转换为标准的头文件存放的目录
- RC_FILE:程序中所用到的图片等资源文件
- LIBS:指定工程要链接的库路径
- INCLUDEPATH:指定工程要加载的头文件路径
- CONFIG:工程配置和编译的参数
- LIBPATH:指定工程要链接的库路径
- INSTALLS:指定make install后程序的目录
3.指定链接的三方库
CONFIG(debug, release|debug){
win32:QCPLIB = qcustomplotd2
else: QCPLIB = qcustomplotd
} else {
win32:QCPLIB = qcustomplot2
else: QCPLIB = qcustomplot
}
INCLUDEPATH += ../thirdPart
LIBS += -L../thirdPart -l$$QCPLIB
也可以这样写
CONFIG(debug, release|debug){
win32:QCPLIB = qcustomplotd2
else: QCPLIB = qcustomplotd
} else {
win32:QCPLIB = qcustomplot2
else: QCPLIB = qcustomplot
}
INCLUDEPATH += ../thirdPart
LIBPATH += ../thirdPart
LIBS += -l$$QCPLIB
4.编译为库
4.1静态库
TEMPLATE = lib
CONFIG += staticlib
4.2动态库
去掉CONFIG += staticlib
这一行
TEMPLATE = lib
5.指定debug,release,win32平台还是别的平台
省略号,自己补足内容
CONFIG(debug, release|debug){
win32:...
else:...
} else {
win32:...
else:...
}
例:指定win32和unix的库路径
win32:LIBS+= libavformat.lib
unix:LiBS+= libavformat.so
6.判断编译环境是x86架构还是arm架构
contains(QT_ARCH, arm64){
message("arm64") #在这里处理arm64所需
}else{
message("x86")
}
以上可以组合使用,如下。
CONFIG += debug_and_release
CONFIG(debug, debug|release){ //处理debug
win32{
}
unix{
contains(QT_ARCH, arm64){
message("arm64")
}else{
message("x86")
}
}
}else{ //处理release
win32{
}
unix{
}
}
7.在linux下编译后指定make install后的文件路径
target.path = /home/admin1/target
需要拷贝的文件以及拷贝目地位置
conf.path = /home/admin1/target
conf.files += \
../config.ini \
../sqlite.db \
INSTALLS += target conf
上述描述的是,在终端编译完成后,执行make install,生成的可执行文件会拷贝到/home/admin1/target 这个路径下,../config.ini ../sqlite.db,一个配置文件和一个数据库文件也会拷贝到/home/admin1/target路径下。