QT .pro文件详解 - 简单易懂

发布时间:2023-05-18 14:15:43 作者:yexindonglai@163.com 阅读(1471)

1.pro文件的作用

QT工程的pro文件,在创建工程时由QTCreater自动创建,我们可以往里面添加内容,增加库文件的声明,包含路径、预处理器定义,生成目录,输出中间目录等等设置。

2.一个简单的示例

  1. # QT 是一个模块的宏定义,后面的+= 表示引入 core和gui模块,
  2. # 查阅其他模块请查阅资料:https://doc.qt.io/archives/qt-5.12/qtmodules.html
  3. QT += core gui
  4. # greaterThan函数是一个判断函数,可以认为是一个if(n1<n2)的代码
  5. # QT_MAJOR_VERSION : 当前qt版本
  6. # 以下代码逻辑为:判断当前qt版本是否大于4,如果大于4,QT加入 widgets 模块
  7. # widgets模块是qt5以及qt5之后的版本,从 gui 模块分离出来的
  8. greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
  9. # 配置,使用c++11标准
  10. CONFIG += c++11
  11. #如果使用以下定义,则编译器会发出警告,
  12. #任何被标记为已弃用的Qt功能(确切的警告取决于您的编译器)。请查阅已弃用API,以便了解如何从中移植代码。
  13. DEFINES += QT_DEPRECATED_WARNINGS
  14. # 如果代码使用了不推荐使用的API,也可能导致代码编译失败。为此,请取消对以下行的注释。
  15. #您还可以选择禁用不推荐使用的API,最高只能禁用特定版本的Qt。
  16. #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
  17. # 代码文件,这将取决于项目栏中将如何展示你的结构,
  18. # 当前工程中的C++源文件
  19. SOURCES += \
  20. main.cpp \
  21. mainwindow.cpp
  22. # 当前工程中的C++头文件
  23. HEADERS += \
  24. mainwindow.h
  25. # 当前工程中的ui文件
  26. FORMS += \
  27. mainwindow.ui
  28. # 以下为默认部署规则,意思是编译后指定make install后的文件路径
  29. qnx: target.path = /tmp/$${TARGET}/bin # 如果是qnx系统使用/tmp/$${TARGET}/bin目录
  30. else: unix:!android: target.path = /opt/$${TARGET}/bin # 其他系统则用/opt/$${TARGET}/bin目录
  31. # target.path不为空,则将target 变量加入到 INSTALLS
  32. # INSTALLS 表示指定make install后程序的目录
  33. !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.指定链接的三方库

  1. CONFIG(debug, release|debug){
  2. win32:QCPLIB = qcustomplotd2
  3. else: QCPLIB = qcustomplotd
  4. } else {
  5. win32:QCPLIB = qcustomplot2
  6. else: QCPLIB = qcustomplot
  7. }
  8. INCLUDEPATH += ../thirdPart
  9. LIBS += -L../thirdPart -l$$QCPLIB

也可以这样写

  1. CONFIG(debug, release|debug){
  2. win32:QCPLIB = qcustomplotd2
  3. else: QCPLIB = qcustomplotd
  4. } else {
  5. win32:QCPLIB = qcustomplot2
  6. else: QCPLIB = qcustomplot
  7. }
  8. INCLUDEPATH += ../thirdPart
  9. LIBPATH += ../thirdPart
  10. LIBS += -l$$QCPLIB

4.编译为库

4.1静态库

  1. TEMPLATE = lib
  2. CONFIG += staticlib

4.2动态库

去掉CONFIG += staticlib这一行

  1. TEMPLATE = lib

5.指定debug,release,win32平台还是别的平台

省略号,自己补足内容

  1. CONFIG(debug, release|debug){
  2. win32:...
  3. else:...
  4. } else {
  5. win32:...
  6. else:...
  7. }

例:指定win32和unix的库路径

  1. win32:LIBS+= libavformat.lib
  2. unix:LiBS+= libavformat.so

6.判断编译环境是x86架构还是arm架构

  1. contains(QT_ARCH, arm64){
  2. message("arm64") #在这里处理arm64所需
  3. }else{
  4. message("x86")
  5. }

以上可以组合使用,如下。

  1. CONFIG += debug_and_release
  2. CONFIG(debug, debug|release){ //处理debug
  3. win32{
  4. }
  5. unix{
  6. contains(QT_ARCH, arm64){
  7. message("arm64")
  8. }else{
  9. message("x86")
  10. }
  11. }
  12. }else{ //处理release
  13. win32{
  14. }
  15. unix{
  16. }
  17. }

7.在linux下编译后指定make install后的文件路径

  1. target.path = /home/admin1/target

需要拷贝的文件以及拷贝目地位置

  1. conf.path = /home/admin1/target
  2. conf.files += \
  3. ../config.ini \
  4. ../sqlite.db \

INSTALLS += target conf
上述描述的是,在终端编译完成后,执行make install,生成的可执行文件会拷贝到/home/admin1/target 这个路径下,../config.ini ../sqlite.db,一个配置文件和一个数据库文件也会拷贝到/home/admin1/target路径下。

关键字QT