본문 바로가기
Unreal/Manual

Unreal C++ CoreMinimal.h, Engine.h

by Dev_카페인 2023. 11. 2.
반응형

[Unreal/C++] CoreMinimal.h, Engine.h

 

언리얼 엔진은 4.16부터 IWYU 모델을 사용하여 코드 컴파일을 최적화 했다.

과거에는 Engine.h를 포함했으나, Engine.h에서는 많은 헤더파일을 포함하고 있어 컴파일에 시간이 많이 소요되었다.

헤더 파일을 한꺼번에 컴파일하다보니 병목현상이 발생하여 컴파일 속도를 위해 필수 헤더파일만을 포함하고 있는 CoreMinimal.h만을 포함하였다.

 

IWYU는 Include-What-You-Use이다. 해석하자면 '너가 원하는 것만 포함'하라는 의미이다.

이 모델을 사용하게 되면 각각 새로 생성한 클래스 헤더에 CoreMinimal.h를 추가하여 최소한의 코드만 클래스에 Include하여 사용하고, 이 외의 코드는 cpp소스파일에 추가한다. 헤더에 선언할 때에는 전방선언으로 작업한다.

 

CoreMinimal.h의 코드를 보면 다음과 같이 헤더파일만 포함되어 있다.

\Engine\Source\Runtime\Core\Public\CoreMinimal.h 의 UE4 루트 디렉터리에 있는 CoreMinimal 헤더 파일
// Copyright Epic Games, Inc. All Rights Reserved.

#pragma once

/*----------------------------------------------------------------------------
	Low level includes.
----------------------------------------------------------------------------*/

#include "CoreTypes.h"

/*----------------------------------------------------------------------------
	Forward declarations
----------------------------------------------------------------------------*/

#include "CoreFwd.h"
#include "UObject/UObjectHierarchyFwd.h"
#include "Containers/ContainersFwd.h"

/*----------------------------------------------------------------------------
	Commonly used headers
----------------------------------------------------------------------------*/

#include "Misc/VarArgs.h"
#include "Logging/LogVerbosity.h"
#include "Misc/OutputDevice.h"
#include "HAL/PlatformCrt.h"
#include "HAL/PlatformMisc.h"
#include "Misc/AssertionMacros.h"
#include "Templates/IsPointer.h"
#include "HAL/PlatformMemory.h"
#include "HAL/PlatformAtomics.h"
#include "Misc/Exec.h"
#include "HAL/MemoryBase.h"
#include "HAL/UnrealMemory.h"
#include "Templates/IsArithmetic.h"
#include "Templates/AndOrNot.h"
#include "Templates/AreTypesEqual.h"
#include "Templates/RemoveCV.h"
#include "Templates/IsPODType.h"
#include "Templates/IsUECoreType.h"
#include "Templates/IsTriviallyCopyConstructible.h"
#include "Templates/UnrealTypeTraits.h"
#include "Templates/EnableIf.h"
#include "Templates/RemoveReference.h"
#include "Templates/ChooseClass.h"
#include "Templates/IntegralConstant.h"
#include "Templates/IsClass.h"
#include "Templates/TypeCompatibleBytes.h"
#include "Traits/IsContiguousContainer.h"
#include "Templates/UnrealTemplate.h"
#include "Math/NumericLimits.h"
#include "HAL/PlatformMath.h"
#include "Templates/IsTriviallyCopyAssignable.h"
#include "Templates/IsTriviallyDestructible.h"
#include "Templates/MemoryOps.h"
#include "Containers/ContainerAllocationPolicies.h"
#include "Templates/IsEnumClass.h"
#include "HAL/PlatformProperties.h"
#include "Misc/Compression.h"
#include "Misc/EngineVersionBase.h"
#include "Internationalization/TextNamespaceFwd.h"
#include "Serialization/Archive.h"
#include "Templates/Less.h"
#include "Templates/Sorting.h"
#include "Misc/Char.h"
#include "GenericPlatform/GenericPlatformStricmp.h"
#include "GenericPlatform/GenericPlatformString.h"
#include "HAL/PlatformString.h"
#include "Misc/CString.h"
#include "Misc/Crc.h"
#include "Math/UnrealMathUtility.h"
#include "Containers/UnrealString.h"
#include "Containers/Array.h"
#include "Misc/FrameNumber.h"
#include "Misc/Timespan.h"
#include "HAL/CriticalSection.h"
#include "Containers/StringConv.h"
#include "UObject/UnrealNames.h"
#include "UObject/NameTypes.h"
#include "Misc/Parse.h"
#include "Math/Color.h"
#include "Templates/AlignmentTemplates.h"
#include "Misc/StructBuilder.h"
#include "Templates/Decay.h"
#include "Templates/PointerIsConvertibleFromTo.h"
#include "Templates/Invoke.h"
#include "Templates/Function.h"
#include "Templates/TypeHash.h"
#include "Containers/ScriptArray.h"
#include "Containers/BitArray.h"
#include "Containers/SparseArray.h"
#include "Containers/Set.h"
#include "Algo/Reverse.h"
#include "Containers/Map.h"
#include "Math/ColorList.h"
#include "Math/IntPoint.h"
#include "Math/IntVector.h"
#include "Logging/LogCategory.h"
#include "Logging/LogMacros.h"
#include "Math/Vector2D.h"
#include "Math/IntRect.h"
#include "Misc/ByteSwap.h"
#include "Containers/EnumAsByte.h"
#include "HAL/PlatformTLS.h"
#include "CoreGlobals.h"
#include "Templates/SharedPointer.h"
#include "Internationalization/CulturePointer.h"
#include "UObject/WeakObjectPtrTemplates.h"
#include "Delegates/DelegateSettings.h"
#include "Delegates/IDelegateInstance.h"
#include "Delegates/DelegateBase.h"
#include "Delegates/MulticastDelegateBase.h"
#include "Delegates/IntegerSequence.h"
#include "Templates/Tuple.h"
#include "UObject/ScriptDelegates.h"
#include "Delegates/Delegate.h"
#include "Internationalization/TextLocalizationManager.h"
#include "Misc/Optional.h"
#include "Templates/IsArray.h"
#include "Templates/RemoveExtent.h"
#include "Templates/UniquePtr.h"
#include "Internationalization/Text.h"
#include "Templates/UniqueObj.h"
#include "Internationalization/Internationalization.h"
#include "Math/Vector.h"
#include "Math/Vector4.h"
#include "Math/VectorRegister.h"
#include "Math/TwoVectors.h"
#include "Math/Edge.h"
#include "UObject/ObjectVersion.h"
#include "Math/Plane.h"
#include "Math/Sphere.h"
#include "Math/CapsuleShape.h"
#include "Math/Rotator.h"
#include "Misc/DateTime.h"
#include "Math/RangeBound.h"
#include "Misc/AutomationEvent.h"
#include "Math/Range.h"
#include "Math/RangeSet.h"
#include "Math/Interval.h"
#include "Math/Box.h"
#include "Math/Box2D.h"
#include "Math/BoxSphereBounds.h"
#include "Math/OrientedBox.h"
#include "Math/Axis.h"
#include "Math/Matrix.h"
#include "Math/RotationTranslationMatrix.h"
#include "Math/RotationAboutPointMatrix.h"
#include "Math/ScaleRotationTranslationMatrix.h"
#include "Math/RotationMatrix.h"
#include "Math/Quat.h"
#include "Math/PerspectiveMatrix.h"
#include "Math/OrthoMatrix.h"
#include "Math/TranslationMatrix.h"
#include "Math/QuatRotationTranslationMatrix.h"
#include "Math/InverseRotationMatrix.h"
#include "Math/ScaleMatrix.h"
#include "Math/MirrorMatrix.h"
#include "Math/ClipProjectionMatrix.h"
#include "Math/InterpCurvePoint.h"
#include "Math/InterpCurve.h"
#include "Math/CurveEdInterface.h"
#include "Math/Float32.h"
#include "Math/Float16.h"
#include "Math/Float16Color.h"
#include "Math/Vector2DHalf.h"
#include "Math/Transform.h"
#include "Math/ConvexHull2d.h"
#include "Math/UnrealMath.h"

 

Engine.h의 파일을 보면 3600줄의 코드를 확인할 수 있다.

Runtime\Engine\Classes\Engine\Engine.h

 

반응형

'Unreal > Manual' 카테고리의 다른 글

Unreal Property System(Reflection)  (0) 2023.11.02
Unreal C++ Class Name.Generated.h 역할  (0) 2023.11.02
Unreal 프로젝트 셋팅 Export, Import  (0) 2023.10.28
Unreal C++ Timer 사용하기  (0) 2023.10.28
Unreal C++ Unreal int32, int64 사용  (0) 2023.10.28