当前位置: 首页 > news >正文

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.")
    }

相关文章:

  • 让 Cursor 教我写 MCP Client
  • Qt for Android编译报错解决 -------- Connection reset
  • 编程技能:字符串函数04,直接使用 strcpy,解决报错
  • C#上位机RS485通信控制变频器
  • CodeBuddy Craft,我的编程搭子
  • 股指期货套期保值怎么操作?
  • python: *args 与 **kwargs 用法
  • 从零实现一个高并发内存池 - 2
  • 【软件测试】第二章·软件测试的基本概念
  • 牛客——签到题
  • JavaScript篇:揭秘函数式与命令式编程的思维碰撞
  • 软件设计师考试《综合知识》计算机编码考点分析——会更新软设所有知识点的考情分析,求个三连
  • 最短路与拓扑(2)
  • map格式可以接收返回 fastjson2格式的数据 而不需要显示的转换
  • 【THRMM】追踪情绪动态变化的多模态时间背景网络
  • PostgreSQL常用DML操作的锁类型归纳
  • FlashInfer - 介绍 LLM服务加速库 地基的一块石头
  • 通过宝塔配置HTTPS证书
  • Problem B: 统计数字次数
  • 智慧工地系统如何实现实时监控?
  • 国防部:菲方应停止一切侵权挑衅危险举动,否则只会自食苦果
  • 李公明︱一周书记:当前科学观中的盲点、危机与……人类命运
  • 商务部新闻发言人就暂停17家美国实体不可靠实体清单措施答记者问
  • 外企聊营商|特雷通集团:税务服务“及时雨”
  • GDP逼近五千亿,向海图强,对接京津,沧州剑指沿海经济强市
  • 新能源汽车,告别混乱创新