UnrealEngine UnityBuild模式编译第三方代码问题
UnrealEngine默认开了UnityBuild模式,把多个代码文件合并到一个较大的cpp文件进行编译。
这样是为了减少总编译任务数,尽量避免单个编译任务代码内容太少导致在切换任务上消耗太多时间,
尤其分布式编译情况下,任务切换成本更高。
UnityBuild参考日志
1>[22/102] Compile [x64] Module.Core.11.cpp
1>[26/102] Compile [x64] Module.Core.14.cpp
但是工程引入第三方代码时这种机制可能会带来负面效果,比如不同源代码针对同一个符号反复定义,
单个源文件各自编译不会有问题,单合并到一个cpp代码,一次编译就可能发生冲突,
为此需要在相关模块build.cs关闭UnityBuild
public class ModuleForThirdPartyCode: ModuleRules
{
public ModuleForThirdPartyCode(ReadOnlyTargetRules Target) : base(Target)
{
bEnableUndefinedIdentifierWarnings = false;
ShadowVariableWarningLevel = WarningLevel.Off;
IWYUSupport = IWYUSupport.None;
bUseUnity = false;
}
}