【UE4源代码观察】可视化所有模块的依赖情况

2024-09-06 23:58

本文主要是介绍【UE4源代码观察】可视化所有模块的依赖情况,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

思路

UE4引擎的模块非常多,我想要观察他们的依赖情况。于是我写了程序读取所有模块的.Build.cs文件,记录每个模块依赖的模块(当前是看PublicDependencyModuleNamesPrivateDependencyModuleNames。但后来经评论提醒我发现AddEngineThirdPartyPrivateStaticDependencies也应该视作是“依赖”但没统计,后续待修正_2020.12.3),然后根据一个自定的规则来排列他们,最后显示出来。
这个规则如下:
我引入一个依赖层级的概念:假设一个模块不依赖于任何其他模块,那他的依赖层级为0;假设A模块依赖于一个模块B,则A的依赖层级比B的依赖层级大1;假设A模块依赖于多个模块,则A的依赖层级比他所依赖的所有模块中依赖层级最大的大1。除了依赖层级外,我还统计了每个模块被依赖的次数,在同一层级内将被依赖次数高的模块放在了前面

成果

统计时,所UE4引擎源代码下载时间是:‎2020‎年‎2‎月‎14‎日,版本为4.24.2
统计的模块涵盖了 Runtime, Editor, Developer, Programs, Plugins, ThirdParty。他们在图中的颜色表示如下:
在这里插入图片描述
因为模块太多,所以我分成了三个部分:假设一个模块不依赖于任何模块,也不被任何一个模块依赖,那就叫他“孤单模块”;假设一个模块有依赖的模块,但是不被任何模块依赖,则叫他“叶子模块”;除此之外,就是“枝干模块”。

枝干模块:

(模块之后的数字是被引用的次数)
在这里插入图片描述

叶子模块:

在这里插入图片描述

孤单模块:

在这里插入图片描述
(按理说不应该出现这类模块,他们可能表示有的依赖关系没有统计上,正如开头所说,经评论提醒:我发现AddEngineThirdPartyPrivateStaticDependencies这种依赖关系没统计,这导致了一些模块被视为了所谓的“孤单模块”,此处之后有机会要重新统计修正_2020.12.3)

其他细节

循环引用

理想模式下规则是没有漏洞的,但是UE4模组之间存在着循环依赖的问题:即A依赖了B,B又依赖了A。这时我不得不对规则进行补充:
如果A依赖的众多模块中存在一个B,而B又依赖了A,则A在统计依赖层级最大值时忽略B的依赖层级。
补充上这条规则之后,所有模块的依赖层级都可以正常计算了

未找到的模块

即有些指明依赖的模块却找不到对应的".Build.cs"文件,但并不多,具体是:

AESGCMHandlerComponent depend PlatformCryptoBCrypt not found
AESGCMHandlerComponent depend PlatformCryptoSwitch not found
AESHandlerComponent depend PlatformCryptoBCrypt not found
AESHandlerComponent depend PlatformCryptoSwitch not found
AudioCapture depend AudioCapturePS4Voice not found
AudioCapture depend AudioCaptureSwitch not found
AudioMixerXAudio2 depend XMA2 not found
CADInterfaces depend CoreTech not found
CADLibrary depend CoreTech not found
DatasmithC4DTranslator depend MelangeSDK not found
DatasmithCADTranslator depend CoreTech not found
DatasmithDispatcher depend CoreTech not found
DatasmithIFCTranslator depend IFCEngine not found
DatasmithOpenNurbsTranslator depend OpenNurbs6 not found
DatasmithOpenNurbsTranslator depend CoreTech not found
DatasmithWireTranslator depend OpenModel not found
DatasmithWireTranslator depend CoreTech not found
Engine depend SwitchRuntimeSettings not found
GameplayMediaEncoder depend IBMRTMPIngest not found
NonRealtimeAudioRenderer depend XMA2 not found
PlatformCrypto depend PlatformCryptoBCrypt not found
PlatformCrypto depend PlatformCryptoSwitch not found
WindowsMixedRealityRHI depend ShaderCore not found
XAudio2 depend XMA2 not found

现在已经查明有些是由于平台的关系,没有对应平台的模块。不知道有没有其他的情况。

模块名字大小写

有些模块的大小写与文件不一致,已经修过了,具体是

AxFImporter: Mainframe -> MainFrame
BuildPatchTool: Http -> HTTP
DataPrepEditor: DataprepCore -> DataPrepCore
DataPrepLibraries: DataprepCore -> DataPrepCore
DatasmithCoreTechExtension: DataprepCore -> DataPrepCore
DatasmithImporter: DataprepCore -> DataPrepCore
ExternalRpcRegistry: HTTPServer -> HttpServer
GLTFImporter: Mainframe -> MainFrame
HTTPChunkInstaller: Http -> HTTP
LauncherServices: JSON -> Json
MDLImporter: Mainframe -> MainFrame
MobileLauncherProfileWizard: JSON -> Json
OnlineSubsystemGameCircle: Http -> HTTP
OnlineSubsystemGooglePlay: Http -> HTTP
OnlineSubsystemIOS: Http -> HTTP
PerfCounters: HTTPServer -> HttpServer
StaticMeshEditorExtension: DataprepCore -> DataPrepCore
UnrealEd: Http -> HTTP
WebMMedia: LibVpx -> libvpx
WebMMedia: LibWebM -> libwebm
WebRemoteControl: HTTPServer -> HttpServer

这篇关于【UE4源代码观察】可视化所有模块的依赖情况的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1143483

相关文章

python: 多模块(.py)中全局变量的导入

文章目录 global关键字可变类型和不可变类型数据的内存地址单模块(单个py文件)的全局变量示例总结 多模块(多个py文件)的全局变量from x import x导入全局变量示例 import x导入全局变量示例 总结 global关键字 global 的作用范围是模块(.py)级别: 当你在一个模块(文件)中使用 global 声明变量时,这个变量只在该模块的全局命名空

每天认识几个maven依赖(ActiveMQ+activemq-jaxb+activesoap+activespace+adarwin)

八、ActiveMQ 1、是什么? ActiveMQ 是一个开源的消息中间件(Message Broker),由 Apache 软件基金会开发和维护。它实现了 Java 消息服务(Java Message Service, JMS)规范,并支持多种消息传递协议,包括 AMQP、MQTT 和 OpenWire 等。 2、有什么用? 可靠性:ActiveMQ 提供了消息持久性和事务支持,确保消

深入探索协同过滤:从原理到推荐模块案例

文章目录 前言一、协同过滤1. 基于用户的协同过滤(UserCF)2. 基于物品的协同过滤(ItemCF)3. 相似度计算方法 二、相似度计算方法1. 欧氏距离2. 皮尔逊相关系数3. 杰卡德相似系数4. 余弦相似度 三、推荐模块案例1.基于文章的协同过滤推荐功能2.基于用户的协同过滤推荐功能 前言     在信息过载的时代,推荐系统成为连接用户与内容的桥梁。本文聚焦于

SWAP作物生长模型安装教程、数据制备、敏感性分析、气候变化影响、R模型敏感性分析与贝叶斯优化、Fortran源代码分析、气候数据降尺度与变化影响分析

查看原文>>>全流程SWAP农业模型数据制备、敏感性分析及气候变化影响实践技术应用 SWAP模型是由荷兰瓦赫宁根大学开发的先进农作物模型,它综合考虑了土壤-水分-大气以及植被间的相互作用;是一种描述作物生长过程的一种机理性作物生长模型。它不但运用Richard方程,使其能够精确的模拟土壤中水分的运动,而且耦合了WOFOST作物模型使作物的生长描述更为科学。 本文让更多的科研人员和农业工作者

pip-tools:打造可重复、可控的 Python 开发环境,解决依赖关系,让代码更稳定

在 Python 开发中,管理依赖关系是一项繁琐且容易出错的任务。手动更新依赖版本、处理冲突、确保一致性等等,都可能让开发者感到头疼。而 pip-tools 为开发者提供了一套稳定可靠的解决方案。 什么是 pip-tools? pip-tools 是一组命令行工具,旨在简化 Python 依赖关系的管理,确保项目环境的稳定性和可重复性。它主要包含两个核心工具:pip-compile 和 pip

深入理解数据库的 4NF:多值依赖与消除数据异常

在数据库设计中, "范式" 是一个常常被提到的重要概念。许多初学者在学习数据库设计时,经常听到第一范式(1NF)、第二范式(2NF)、第三范式(3NF)以及 BCNF(Boyce-Codd范式)。这些范式都旨在通过消除数据冗余和异常来优化数据库结构。然而,当我们谈到 4NF(第四范式)时,事情变得更加复杂。本文将带你深入了解 多值依赖 和 4NF,帮助你在数据库设计中消除更高级别的异常。 什么是

Jenkins构建Maven聚合工程,指定构建子模块

一、设置单独编译构建子模块 配置: 1、Root POM指向父pom.xml 2、Goals and options指定构建模块的参数: mvn -pl project1/project1-son -am clean package 单独构建project1-son项目以及它所依赖的其它项目。 说明: mvn clean package -pl 父级模块名/子模块名 -am参数

寻迹模块TCRT5000的应用原理和功能实现(基于STM32)

目录 概述 1 认识TCRT5000 1.1 模块介绍 1.2 电气特性 2 系统应用 2.1 系统架构 2.2 STM32Cube创建工程 3 功能实现 3.1 代码实现 3.2 源代码文件 4 功能测试 4.1 检测黑线状态 4.2 未检测黑线状态 概述 本文主要介绍TCRT5000模块的使用原理,包括该模块的硬件实现方式,电路实现原理,还使用STM32类

Python:豆瓣电影商业数据分析-爬取全数据【附带爬虫豆瓣,数据处理过程,数据分析,可视化,以及完整PPT报告】

**爬取豆瓣电影信息,分析近年电影行业的发展情况** 本文是完整的数据分析展现,代码有完整版,包含豆瓣电影爬取的具体方式【附带爬虫豆瓣,数据处理过程,数据分析,可视化,以及完整PPT报告】   最近MBA在学习《商业数据分析》,大实训作业给了数据要进行数据分析,所以先拿豆瓣电影练练手,网络上爬取豆瓣电影TOP250较多,但对于豆瓣电影全数据的爬取教程很少,所以我自己做一版。 目

PHP7扩展开发之依赖其他扩展

前言 有的时候,我们的扩展要依赖其他扩展。比如,我们PHP的mysqli扩展就依赖mysqlnd扩展。这中情况下,我们怎么使用其他扩展呢?这个就是本文讲述的内容。 我们新建立一个扩展,名字叫 demo_dep , 依赖之前的say扩展。 在demo_dep扩展中,我们实现demo_say方法。这个方法调用say扩展的say方法。 代码 基础代码 确保say扩展的头文件正确安装到了php