UE4是由多个模块组成的,不仅包含虚幻源代码的模块,还有创建项目时生成的模块,如果自己写了插件里面还有插件的模块,每个模块都有自己的功能实现,通过build.cs也有自己的编译方式,里面包含了定义的模块的依赖关系、额外的库、路径等信息。这些文件被编译成dll文件,并通过单一的可执行文件进行加载。
Target是通过C#源文件声明的,扩展名为.target.cs,并存储在项目的 Source 目录下。每个.target.cs文件都声明一个类,从TargetRules基类衍生而来,并设置属性来控制如何从其构造函数进行编译。当要求编译目标时,虚幻编译工具将编译target.cs文件,并在其中构造类来确定其设置。
模块是UE4的构建模块。引擎是由大量的模块集合实现的,开发游戏的时候提供自己的模块来进行扩充。每个模块都包含了一组功能,并且可以提供公共接口和编译环境(包括宏、路径等)来让其他模块使用。
模块是通过C#源文件声明的,扩展名为.build.cs,存储再项目的Source目录下。属于一个模块的C++源代码与.build.cs文件并列存储,或者存储再他的子目录种。每个.build.cs都声明一个类,从ModuleRules基类衍生而来,并设置属性来控制如何从其构造函数进行构建,这些build.cs文件都由UBT编译。并被构造来确定整个编译环境。
配置文件里面有很多参数,可以自定义,了解其中的参数含义可以自定义配置BuildConfiguratiON.xml来改变编译配置:
之前的引擎版本大概是4.16之前,包含头文件Engin.h或UnrealEd.h就可以包含大部分你使用到的库,通过预编译头文件(PCH)快速编译这些文件即可达成较快的编译时间。但随着引擎的更新,这成为了一个瓶颈。
所以,引擎添加了IWYU规则。也就是只包含你所需要的头文件依赖,这样可以减小项目的不必要依赖,精简项目,并且可以大大减少编译时间。