본문 바로가기

프로그래밍/TIL

[UnrealEngine] CoreMinimal.h

  지금까지는 아무 생각없이 UnrealEngine의 헤더파일 맨 윗 줄에 #include "CoreMinimal.h"를 넣어주고 있었다.

 그런데 Clangd에서 CoreMinimal.h가 직접적으로 인용되고 있지 않다고 워닝을 띄우길래, 갑자기 궁금증이 들었다.

 CoreMinimal.h에는 언리얼 엔진에서 기본적으로 제공하는 Type definition 같은 것들이 들어있지 않을까 그냥 막연하게만 생각하고 있었는데, 이 참에 간단하게나마 알아보자는 생각이 들었다.

 

IWYU (Include What You Use)

언리얼 엔진 4.15 출시!

 

 CoreMinimal.h는 UE4.15에 처음으로 만들어진 헤더(로 보인)다. C++의 고질적 약점인 컴파일 타임을 개선하기 위한 조치로 IWYU라는 기법을 도입하면서부터이다. IWYU는 거창해보이지만, C++에서 기본적으로 배우는 "꼭 필요한 헤더만을 인클루드 해라"라는 가르침이다.

 이미지에서 볼 수 있듯이, CoreMinimal.h는 FString, FName, TArray, FVector 등의 기본적으로 Unreal Engine을 사용하기 위한 헤더만을 인클루드해서, UE4.15 이전 버전에서 컴파일 시간 증가의 원인이 되던 `Engine.h`나 `UnrealEd.h` 같은 거대한 헤더를 인클루드해야 했던 문제를 회피하게 만들어준다.

 설명에 보면 PCH 또한 명시적으로 포함하지 않게 만들어, 컴파일 타임 감소에 대한 여러 해결책을 모색하는 것으로 보인다.

 

언리얼 엔진 프로그래밍의 IWYU(Include What You Use) | 언리얼 엔진 5.7 문서 | Epic Developer Community

 

 각 Plugin의 Build.cs에 PCHUsage를 위와 같이 설정해주면 IWYU툴이 코드를 확인하고 PCH를 만들때 엄격하게 해당 Plugin이 필요한 헤더만을 인클루드하게 만들어주는 모양이다. 이건 처음알았네.

 

 결과적으로 저 Warning은 false alarm이고, CoreMinimal.h를 포함하는 것이 맞다.