본문으로 바로가기

Unreal Header Tool (UHT)

category UnrealEngine/Impl 2023. 9. 16. 19:25

Unreal Header Tool은 언리얼의 C++ 코드들을 컴파일 하기 전에 모든 헤더들을 순회하면서 언리얼 리플렉션 시스템에 필요한 정보들을 읽어들인 후, .generated.h 파일과 .gen.cpp 파일을 Intermediate 폴더에 생성한다.

 

엔진 코드에 EpicGames.UHT.dll이 있을텐데, 이처럼 독립적으로 실행되는 프로그램이 아니라 UBT같이 다른 프로그램의 모듈방식으로 포함되는 프로그램이다.

 

프로그래머가 빌드를 시작하면 UBT가 실행되고, UBT는 C++ 컴파일러 실행전에 UHT를 실행한다. 이 UHT는 헤더파일들을 순회하며 UPROPERTY, UFUNCTION, UCLASS 등 매크로로 선언된 정보들을 .geneated.h, .gen.cpp 에 저장하는 역할을 수행한다. 이 과정이 마무리되면 UHT의 작업은 끝나게 되고 일반 C++ 컴파일러가 UHT이 생성한 코드를 포함해 C++ 컴파일을 수행한다.

 

1. UBT가 리플렉션 키워드를 탐색

2. UHT가 해당 .h를 파싱

3. 리플렉션 데이터 정보 수집

4. 수집한 데이터를 .generated.h / .gen.cpp에 저장

5. C++ 컴파일러가 빌드할때 generated.h 코드를 추가해 컴파일

 

.generated.h 에는 StaticClass(), StaticStruct()같은 것이 포함되어 있어, 유형에 대한 리플렉션 데이터를 구하는 것이 쉬워진다.

 

UHT의 코드를 보고 싶은 사람은 해당부분을 보면 된다.

 

 

특히 UhtHeaderCodeGenerator.cs를 보면 우리가 자주 봤던 코드들을 확인할 수 있을것이다.