Qt pro文件详解
创始人
2024-11-14 07:39:52
0

概述

        在Qt中,.pro 文件(也称为项目文件)是Qt项目管理系统(qmake)所使用的配置文件。这个文件定义了如何构建你的Qt应用程序或库,其使用简单的键值对语法,允许你指定源文件、头文件、库依赖、配置选项等。

        qmake 是一个工具,它读取 .pro 文件,并生成一个标准的 Makefile(在Unix-like系统上)或者相应的项目文件(在Windows上,如Visual Studio的项目文件),以便可以使用相应的构建工具(如 make 或 IDE)来构建项目。

基本指令

1. TARGET: 指定生成的目标文件的名称(不包括文件扩展名)。

例如,TARGET = myapp 将生成名为myapp的可执行文件(在Windows上可能是myapp.exe)。

2. TEMPLATE: 指定项目的模板类型。

  • app - 应用程序模板,用于生成可执行文件。这是最常见的模板类型,用于构建桌面应用程序。
  • lib - 库模板,用于生成库文件(.dll、.so、.dylib或.a等,取决于平台和编译器)。这个模板可以用来构建静态库或动态库。
  • subdirs - 子目录模板,用于处理包含多个子项目的项目。在这个模板下,你可以在.pro文件中指定其他.pro文件,qmake会递归地处理这些子项目。
  • vcapp 和 vclib - 这两个模板与app和lib类似,但它们是为在Visual Studio中集成Qt项目而设计的。它们会生成适合在Visual Studio中打开的项目文件(.vcproj)。然而,随着Qt版本的更新,这些模板可能已经被废弃或不再推荐使用,因为Qt Creator和qmake现在提供了更好的Visual Studio集成。
  • aux - 辅助模板,用于构建不生成可执行文件或库文件的项目部分,如插件或资源文件。然而,这个模板的使用并不常见,并且在最新的Qt版本中可能不再支持或已被其他机制取代。

3. CONFIG:它用于指定项目的编译和链接选项。

        CONFIG变量可以包含多个选项,这些选项可以是Qt内置的,也可以是用户自定义的。每个选项都影响着qmake生成Makefile的方式,以及项目的编译和链接过程。

1)以下是一些常见的内置CONFIG选项:

  • c++11、c++14、c++17、c++20等:指定使用的C++标准版本。
  • debug:构建调试版本的项目。
  • release:构建发布版本的项目。注意,debug和release通常是互斥的,但在某些情况下,你可以通过条件语句在.pro文件中同时定义它们,以便为不同的构建配置生成不同的目标。
  • staticlib、sharedlib:指定生成静态库或动态库。注意,这些选项通常与TEMPLATE = lib一起使用。
  • qt:启用对Qt模块的支持。这个选项是默认启用的,但你可以通过条件语句来禁用它。

2)自定义的CONFIG:变量、函数、第三方库等。

3)注意:

  • CONFIG选项是大小写不敏感的,但出于一致性和可读性的考虑,建议使用小写字母。
  • CONFIG选项可以多次添加到.pro文件中,qmake会合并它们。但是,请注意某些选项(如debug和release)可能是互斥的。
  • 你可以使用条件语句(如if、else、for等)来根据CONFIG选项的值控制.pro文件中的其他设置。

4. QT:用于指定项目将使用的Qt模块。QT变量可以包含多个模块名,这些模块名之间用空格分隔。

例如:QT += core gui widgets 

项目需要链接Qt的核心(core)、图形用户界面(gui)和窗口部件(widgets)模块。

Qt模块通常分为几大类,包括但不限于:

  • 核心模块(如core):提供非GUI功能,如字符串处理、容器、文件访问、时间处理、线程和进程等。
  • GUI模块(如gui、widgets):提供窗口系统、事件处理、绘图、字体、图像等GUI功能。
  • 网络模块(如network):提供网络通信功能,如TCP/IP客户端和服务器、UDP、SSL/TLS等。
  • 数据库模块(如sql):提供数据库访问功能,支持多种数据库系统。
  • 多媒体模块(如multimedia):提供音频、视频和摄像头访问功能。
  • Web模块(如webengine):提供基于Chromium的Web浏览器引擎,用于在Qt应用程序中嵌入Web内容。

注意:随着Qt版本的更新,可用的模块和它们的名称可能会发生变化。因此,建议查阅你正在使用的Qt版本的官方文档,以获取有关可用模块的最新信息。

文件列表指令

  • SOURCES: 列出项目中的所有C++源文件。qmake会自动将这些文件编译成目标代码。
  • HEADERS: 列出项目中的所有头文件。这些文件通常被包含在源文件中,但不需要单独编译。
  • FORMS: 列出由Qt Designer创建的UI文件。qmake会使用uic工具将这些文件转换成C++代码。
  • RESOURCES: 列出资源文件(.qrc),这些文件定义了应用程序中使用的图标、图片等资源。
  • TRANSLATIONS: 列出翻译文件(.ts),这些文件用于国际化和本地化支持。
FORMS += \     $$PWD/frmpage2show.ui  HEADERS += \     $$PWD/frmpage2show.h  SOURCES += \     $$PWD/frmpage2show.cpp  TRANSLATIONS = lang_zh.ts \                lang_en.ts  RESOURCES += \     resources.qrc

其他常用指令

  • INCLUDEPATH: 指定编译器搜索头文件的额外路径。这对于包含非标准位置的头文件非常有用。
  • LIBS: 指定链接器需要链接的外部库。可以指定库文件的路径和名称,以及任何必要的库搜索路径。
  • DEFINES: DEFINES变量用于指定在编译时传递给C++预处理器的一系列宏定义。 

        1)DEFINES变量可以包含多个宏定义,它们之间用空格分隔。请注意,在.pro文件中定义宏时,不会直接指定值;相反,你需要在源代码中使用#ifdef、#ifndef、#if defined(...)等预处理指令来检查宏是否被定义。 

// 例如: DEFINES += MY_FEATURE_ENABLED USE_LOGGING

        在编译时,这些宏会被添加到C++预处理器的宏定义列表中,因此你可以在项目的源代码中这样使用它们: 

#ifdef MY_FEATURE_ENABLED      //启用某个特性的代码  #endif  #ifdef USE_LOGGING      //记录日志的代码  #endif

        2).pro文件不直接支持为宏指定值。但是,你可以通过一些技巧来实现类似的效果,比如使用DEFINES来定义宏,并在源代码中根据这个宏的存在与否来设置另一个宏的值。

        3)DEFINES变量中定义的宏在项目的所有源文件和头文件中都是可见的,除非你在源代码中使用了条件编译指令来限制它们的作用范围。因此,请确保你的宏名称具有足够的唯一性,以避免与Qt库或其他第三方库中的宏名称冲突。

  • VERSION: 指定项目的版本号。这对于生成包含版本信息的文件或资源很有用。 
  • SUBDIRS: 在使用subdirs模板时,指定要构建的子目录列表。

        SUBDIRS变量用于指定当前项目应该包含的子项目(子目录)。这允许你将一个大型项目分解成多个更小的、更易于管理的部分,每个部分都可以有自己的.pro文件和构建配置。

        当SUBDIRS变量被设置时,qmake会首先处理当前项目文件(即包含SUBDIRS变量的那个.pro文件),然后递归【1】地处理每个指定的子目录中的.pro文件。

        SUBDIRS变量的值是一个或多个子目录的名称,这些名称之间用空格分隔。每个子目录都应该包含一个.pro文件,该文件定义了该子项目的构建规则。

// 例如: SUBDIRS += JpLoginMng SUBDIRS += UI SUBDIRS += components 或 SUBDIRS += \  JpLoginMng\ UI\  components 或 SUBDIRS += JpLoginMng UI components //【2】 SUBDIRS += JPKeyboard/3rdparty/pinyin/pinyin.pro SUBDIRS += JPKeyboard/JPKeyboard.pro

        你还可以在每个子目录的.pro文件中使用CONFIG变量来指定该子项目的特定构建配置,如debug、release、staticlib等。这些配置将仅影响该子项目,而不会影响其他子项目或顶层项目。 

【1】递归处理,若SUBDIRS += src,会递归的执行src中的所有pro文件吗?

        并不会递归地执行src目录中的所有.pro文件。

        qmake只会处理SUBDIRS变量中明确指定的子目录(或子项目)中的.pro文件。如果src目录本身包含了一个.pro文件,那么qmake会处理这个文件。

        如果src目录中还包含其他子目录,并且这些子目录中也有.pro文件,那么这些.pro文件不会自动被qmake处理,除非它们也被明确地添加到了SUBDIRS变量中。但是,一般顶层.pro文件包含的子目录中只包含1个.pro文件,即:项目纵深只有2层。因为,纵深越大,这样会使项目的构建过程变得更加复杂和难以维护。因此,在大多数情况下,项目纵深只有2层,在顶层.pro中建议显式地列出所有需要构建的子项目。

【2】除了包含子目录名,SUBDIRS还可以指定子目录中的pro文件 。这样,你可以构建多个项目或项目的一部分,将它们组织在Qt的项目管理系统中。

相关内容

热门资讯

必备科技“pokermaste... 必备科技“pokermaster怎么无线刷金币”(透视)详细开挂辅助教程尤其是(私人局透视方法)平台...
第八分钟透视挂!拉米大厅游戏源... 第八分钟透视挂!拉米大厅游戏源码,樱花之盛辅助器(微信链接金花辅助开挂app)1、拉米大厅游戏源码a...
黑科技辅助(微扑克工具)外挂软... 黑科技辅助(微扑克工具)外挂软件透明挂智能ai辅助安装插件(透视)透明挂教程(2021已更新)(哔哩...
一分钟秒懂!wpk辅助器是真的... 一分钟秒懂!wpk辅助器是真的假的,太坑了本来真的有挂(2024已更新)(哔哩哔哩);是一款可以让一...
第七分钟了解!财神破解版全自动... 第七分钟了解!财神破解版全自动脚本插件开挂,兴动休闲辅助软件透视挂(最新版本2026)1、这是跨平台...
信息共享“扑克世界辅助软件下载... 信息共享“扑克世界辅助软件下载安装”(透视)详细开挂辅助方法在 中,各式各样的方法看似可以实现“透视...
三分钟透视挂!西兵辅助器,微信... 三分钟透视挂!西兵辅助器,微信西楚辅助(微信链接金花辅助开挂神器)1、金币登录送、破产送、升级送、活...
黑科技辅助(wpk测试)外挂软... 黑科技辅助(wpk测试)外挂软件透明挂智能ai辅助黑科技(透视)黑科技教程(2020已更新)(哔哩哔...
十分钟了解!闲乐互娱源码插件开... 十分钟了解!闲乐互娱源码插件开挂,微信微乐小程序修改器软件透视挂(最新版本2026)1、微信微乐小程...
分享一款!微扑克数据辅助软件,... 分享一款!微扑克数据辅助软件,太坑了原本是有挂(2020已更新)(哔哩哔哩);亲真的是有正版授权,小...