Choose your operating system:
Windows
macOS
Linux
模块是UE4的构建块。引擎是以大量模块的集合形式实现的,游戏提供自己的模块来扩充自己。每个模块都封装了一组功能,并且可以提供公共接口和编译环境(包括宏、路径等)供其他模块使用。
模块是通过C#源文件声明的,扩展名为.build.cs,存储在项目的 源(Source) 目录下。属于一个模块的C++源代码与.build.cs文件并列存储,或者存储在它的子目录中。每个.build.cs文件都声明一个类,从ModuleRules基类衍生而来,并设置属性来控制如何从其构造函数进行构建。这些.build.cs文件都由UnrealBuildTool编译,并被构造来确定整个编译环境。
.build.cs文件的典型结构如下。
using UnrealBuildTool;
using System.Collections.Generic;
public class MyModule : ModuleRules
{
public MyModule(ReadOnlyTargetRules Target) : base(Target)
{
// Settings go here
}
}
读/写属性
- Type (ModuleType)
-
模块的类型
- BinariesSubFolder (String)
-
Binaries/PLATFORM文件夹的子文件夹,用于在编译DLL时放入此模块。该文件夹仅供通过搜索找到的模块使用,如TargetPlatform或ShaderFormat模块。如果未使用FindModules进行查找定位,将不会找到该模块。
- PrivatePCHHeaderFile (String)
-
该模块的显式私有PCH。意味着该模块将不会使用共享的PCH。
- SharedPCHHeaderFile (String)
-
该模块提供的共享PCH的标头文件名。必须为公共C++标头文件的有效相对路径。此设置应该仅应用于那些被大量其它C++模块包含的标头文件。
- ShortName (String)
-
为该模块的中间目录和中间文件指定一个替代名称。路径长度达到上限时,此功能非常实用。
- bTreatAsEngineModule (Boolean)
-
是否应将此模块视为引擎模块(例如,使用引擎定义、PCH、以DebugGame配置中启用的优化进行编译等……)。根据创建它的规则程序集初始化为默认值。
- bUseRTTI (Boolean)
-
使用运行时类型信息
- bUseAVX (Boolean)
-
指示编译器在支持的平台上,在使用SSE或AVXD内联函数的地方生成AVX指令。注意,启用此项后,会修改PC平台的minspec,由此得到的可执行文件在不支持AVX的计算机上将会崩溃。
- bEnableBufferSecurityChecks (Boolean)
-
启用缓冲区安全检查。通常应启用,因为它可以防止严重的安全风险。
- bEnableExceptions (Boolean)
-
启用异常处理
- bEnableObjCExceptions (Boolean)
-
启用Objective C异常处理
- bEnableUndefinedIdentifierWarnings (Boolean)
-
启用#if表达式中使用未定义辨识符的警告
- MinSourceFilesForUnityBuildOverride (Int32)
-
在统一编译之前,该模块中将为该模块激活的源文件的数量。如果设为-1以外的任何值,将覆盖由MinGameModuleSourceFilesForUnityBuild控制的默认设置
- MinFilesUsingPrecompiledHeaderOverride (Int32)
-
若不为零,则覆盖BuildConfiguration.MinFilesUsingPrecompiledHeader。
- bBuildLocallyWithSNDBS (Boolean)
-
模块使用#import,因此在使用SN-DBS进行编译时必须在本地编译
- IsRedistributableOverride (Nullable<Boolean>)
-
为该模块重新分配覆盖标记。
- bLegalToDistributeObjectCode (Boolean)
-
是否可以公开分发此模块的输出,即使它拥有不公开的模块(即CarefullyRedist, NotForLicensees, NoRedist)的代码/依赖性也同样如此。要发布二进制文件而非源时,应使用此功能。
- WhitelistRestrictedFolders (List<String>)
-
编译此二进制文件时所要引用的白名单文件夹列表,不含传播受限的文件夹名称
- AliasRestrictedFolders (Dictionary<String, String>)
-
一组使用别名的受限目录引用
- bEnforceIWYU (Boolean)
-
当PCHUsage设为ExplicitOrSharedPCH时,强制执行"包含你使用的内容"规则;使用单块标头(Engine.h,、UnrealEd.h,等)时发出警告,并首先检查源文件是否包括它们匹配的标头。
- bAddDefaultIncludePaths (Boolean)
-
是否将所有默认包含路径添加至该模块(如Source/Classes文件夹、Source/Public下的子文件夹)。
- bIgnoreUnresolvedSymbols (Boolean)
-
是否忽略模块中的悬挂(即未解析的外部)符号
- bPrecompile (Boolean)
-
是否应预编译此模块。默认为目标的bPrecompile标记。清除此标记即可避免预编译该模块。
- bUsePrecompiled (Boolean)
-
此模块是否应该使用预编译数据。对从已安装的程序集创建的模块而言,始终为true。
- bAllowConfidentialPlatformDefines (Boolean)
-
该模块是否可以使用PLATFORM_XXXX风格进行定义,其中XXXX是保密的平台名称。这可以用来确保引擎或其他共享代码不会泄露#if PLATFORM_XXXX块内的机密信息。然而,接受许可的一方可能想要获得这些代码。注意:这是对未来的展望,以前的保密平台(如PS4)不太可能受到限制
- PublicIncludePathModuleNames (List<String>)
-
包含标头文件的模块名称列表(不需要路径),我们模块的公共标头需要对这些标头文件进行访问,但是不需要"导入"或链接。
- PublicDependencyModuleNames (List<String>)
-
公共依赖性模块名称的列表(不需要路径)(自动执行私有/公共包含)。这些是我们的公共源文件所需要的模块。
- PrivateIncludePathModuleNames (List<String>)
-
包含标头文件的模块名称列表(不需要路径),我们模块的私有代码文件需要对这些标头文件进行访问,但是不需要"导入"或链接。
- PrivateDependencyModuleNames (List<String>)
-
私有依赖性模块名称列表。我们的私有代码依赖这些模块,但我们的公共代码不依赖这些模块。
- CircularlyReferencedDependentModules (List<String>)
-
出于遗留原因,不应在新代码中使用。应被视为循环引用的模块依赖性列表。该模块必须已经添加至公共或私有依赖模块列表中。
- PublicSystemIncludePaths (List<String>)
-
系统/库列表包含路径列表——通常用于外部(第三方)模块。这些是公共的稳定标头文件目录,在解析标头文件依赖性时不会被检查。
- PublicIncludePaths (List<String>)
-
(当前不需要此设置,因为我们会从"Public"文件夹中发现所有文件)所有路径的列表,包含公开给其他模块的文件。
- PrivateIncludePaths (List<String>)
-
通向此模块内部包含文件的所有路径的列表,不向其他模块公开(至少有一个包含到"Private"路径,如果要避免相对路径,则会更多)
- PublicSystemLibraryPaths (List<String>)
-
系统库路径列表(.lib文件的目录)——对于外部(第三方)模块,请使用PublicAdditionalLibaries。
- PrivateRuntimeLibraryPaths (List<String>)
-
运行时各个库的搜索路径列表(例如.so文件)
- PublicRuntimeLibraryPaths (List<String>)
-
运行时各个库的搜索路径列表(例如.so文件)
- PublicAdditionalLibraries (List<String>)
-
附加库的列表(.lib文件的名称,包括扩展名)——通常用于外部(第三方)模块
- PublicPreBuildLibraries (List<String>)
-
一组包含其他预编译库的列表(.lib文件的名称列表,包含后缀) - 通常用于仍需编译但使用TargetRules.PreBuildSteps 或 TargetRules.PreBuildTargets的其他目标。
- PublicSystemLibraries (List<String>)
-
要使用的系统库路径列表——其通过名称引用并通过系统路径查找。如果需要引用.lib文件,请使用PublicAdditionalLibraries。
- PublicFrameworks (List<String>)
-
XCode框架的列表(iOS和MacOS)
- PublicWeakFrameworks (List<String>)
-
弱框架列表(用于OS版本的转换)
- PublicAdditionalFrameworks (List<Framework>)
-
附加框架列表——通常用于Mac和iOS上的外部(第三方)模块
- AdditionalBundleResources (List<BundleResource>)
-
应被复制到Mac或iOS应用捆绑包的附加资源列表
- TypeLibraries (List<TypeLibrary>)
-
需要生成头文件的类型库列表(仅限Windows)
- PublicAdditionalShadowFiles (List<String>)
-
针对在远程设备(如iOS)上执行的版本,此列表包含需要复制的附加文件,以便应用程序能够成功链接。源/标头文件和PCH会自动复制。通常这只是预编译的第三方库依赖性的列表。
- PublicDelayLoadDLLs (List<String>)
-
延迟加载DLL列表——通常用于外部(第三方)模块
- PrivateDefinitions (List<String>)
-
该模块的私有编译器定义
- PublicDefinitions (List<String>)
-
该模块的公共编译器定义
- DynamicallyLoadedModuleNames (List<String>)
-
此模块在运行时可能需要的附加模块
- RuntimeDependencies (RuntimeDependencyList)
-
该模块在运行时依赖的文件列表。这些文件将与目标一同暂存。
- AdditionalPropertiesForReceipt (ReceiptPropertyList)
-
要添加到编译接收中的附加属性列表
- PrecompileForTargets (PrecompileTargetsType)
-
应该针对哪个目标对此模块进行预编译
- ExternalDependencies (List<String>)
-
外部文件,如果修改,会使makefile无效。相对路径相对于.build.cs文件解析。
- AdditionalCodeGenDirectories (List<String>)
-
包含已生成的互操作(interop)文件的外部目录。
- SubclassRules (List<String>)
-
子类规则文件,如果修改,会使makefile无效。
- bRequiresImplementModule (Nullable<Boolean>)
-
此模块的实现是否需要IMPLEMENT_MODULE宏。大多数UE4模块都有此需要,因为我们使用IMPLEMENT_MODULE宏来执行其他全局重载(例如运算符新建/删除向GMalloc的传递)。
- CppStandard (CppStandardVersion)
-
用于编译此模块的标准。
- ModuleSymbolVisibility (SymbolVisibility)
-
控制符号的可视性