qt模块feature QT_FEATURE_* qt_lib_*.pri QT_CONFG qtConfig
创始人
2024-03-18 06:40:53
0次

qt为方便对代码进行删减,将代码拆分成很多模块,对每个模块梳理出feature,为了简化程序的使用和其他目的,qt还对每个模块分成public模块和private模块(比如core分为core和core-privare模块,但两者公用同一个core.dll)。通过模块对应源码文件夹下的confiure.json控制feature开关来删减系统不支持或者不必要的feature,对应feature的condition是可配置的,感兴趣的可以查看qt的编译脚本文件(shell脚本/dos脚本)。

widgets/configure.json

在配置好模块的configure.json后,运行configure启动编译脚本(shell脚本/dos脚本),过程中会自动为模块生成对应头文件,比如widgets 模块,会生成qtwidgets-config.h和qtwidgets-config-p.h,每一个属性在.h中都有一个宏,作为代码的宏开关,值一般为1或-1,用于控制模块源码的逻辑,其内容如下:

qtwidgets-config.h


在qt 的源文件qglobal.h中有这样两个方便使用feature对应宏开关的宏定义QT_CONFIG和QT_REQUIRE_CONFIG:

//QtInstallDir\Qt5.12.0\5.12.0\msvc2015_64\include\QtCore\qglobal.h
#define QT_CONFIG(feature) (1/QT_FEATURE_##feature == 1)
#define QT_REQUIRE_CONFIG(feature) Q_STATIC_ASSERT_X(QT_FEATURE_##feature == 1, "Required feature " #feature " for file " __FILE__ " not available.")
qmainwindow.h

qt模块编译好后会产生对应qt_lib_*.pri和qt_lib_*_private.pri脚本(qmake language脚本)文件,方便qmake生成makefile时查询模块是否支持对应的feature。下面是qt_lib_core.pri文件内容:

#D:\Qt\Qt5.12.0\5.12.0\msvc2015_64\mkspecs\modules\qt_lib_core.pri
QT.core.VERSION = 5.12.0
QT.core.name = QtCore
QT.core.module = Qt5Core
QT.core.libs = $$QT_MODULE_LIB_BASE
QT.core.includes = $$QT_MODULE_INCLUDE_BASE $$QT_MODULE_INCLUDE_BASE/QtCore
QT.core.frameworks =
QT.core.bins = $$QT_MODULE_BIN_BASE
QT.core.depends =
QT.core.uses = libatomic
QT.core.module_config = v2
QT.core.CONFIG = moc resources
QT.core.DEFINES = QT_CORE_LIB
QT.core.enabled_features = properties animation textcodec big_codecs codecs commandlineparser cxx11_future textdate datestring filesystemiterator filesystemwatcher gestures itemmodel proxymodel identityproxymodel library mimetype processenvironment process statemachine qeventtransition regularexpression settings sharedmemory sortfilterproxymodel std-atomic64 stringlistmodel systemsemaphore temporaryfile timezone topleveldomain translation xmlstream xmlstreamreader xmlstreamwriter
QT.core.disabled_features =
QT_CONFIG += properties animation textcodec big_codecs codecs textdate datestring doubleconversion filesystemiterator filesystemwatcher gestures itemmodel proxymodel identityproxymodel library mimetype process statemachine regularexpression settings sharedmemory sortfilterproxymodel stringlistmodel systemsemaphore temporaryfile translation xmlstream xmlstreamreader xmlstreamwriter
QT_MODULES += core

里面的QT.core.enabled_features项描述了core模块所支持的特性,所有的features是在编译模块源码之前,事先配置对应模块(module)源码文件夹下的configure.json文件内容的执行结果。qt_lib_*.pri只是提供一个方便脚本(qmake language脚本)快速查询的结果的功能。对比可以发现,qt_lib_*.pri中的enable_features项与qt*-config.h中的项基本一一对应。
脚本查询的入口参考:qtConfig(inputdialog) 

qtConfig()查询的是模块中的enabled_features值,这个脚本中的QT_CONFIG暂时没有发现有什么用。

QT_CONFIG宏用法及支持的参数_荆楚闲人的博客-CSDN博客_qtconfig

 qt 私有头文件 private_丘上人的博客-CSDN博客 

qmake language qt 工程文件 配置文件 .pro .prl .prf .pri 词法 语法 for循环 判断语句 函数定义_丘上人的博客-CSDN博客

相关内容

热门资讯

前端-session、jwt 目录:   (1)session (2&#x...
linux入门---制作进度条 了解缓冲区 我们首先来看看下面的操作: 我们首先创建了一个文件并在这个文件里面添加了...
关于测试,我发现了哪些新大陆 关于测试 平常也只是听说过一些关于测试的术语,但并没有使用过测试工具。偶然看到编程老师...
前缀和与对数器与二分法 1. 前缀和 假设有一个数组,我们想大量频繁的去访问L到R这个区间的和,...
nodejs:本地安装nvm实... 一、背景-使用不同版本node的原因 vue3+ts、nuxt3版本,node...
JAVA集合知识整理 Java集合知识整理 HashMap相关 HashMap的底层数据结构:jdk1.8之...
无刷直流电机介绍及单片机控制实... 无刷直流电机介绍及单片机控制实例前言基本概念优势与劣势使用寿命基本结构使用单片机控制实例电子调速器&...
fwdiary(2) dp2 1.传纸条  AcWing 275. 传纸条 - AcWing 走两条路,走一条最大的...
常用的DOS命令 常用的DOS命令 DOS(Disk Operating System,磁...
<C++> 类和对象(下) 1.const成员函数将const修饰的“成员函数”称之为const成员函数,cons...