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;
}
}