언리얼에서 빌드를 시작하면 컴파일러가 컴파일을 수행하기 전에 언리얼 빌드 툴(UBT)과 언리얼 헤더 툴(UHT)이 콜 되어먼저 실행된다. 일반적으로 UBT가 먼저 호출되며, 필요에 따라 UHT가 호출된다. 이후 실제 C++ 컴파일 과정이 진행된다.

 

 

목차

     

     


     

     

    Unreal Engine의 컴파일 과정

     

     


     

    C++과 언리얼 C++의 컴파일 과정의 차이점은?

     

    컴파일 과정 컴파일 과정
    C++   전처리 과정 컴파일 과정 - 어셈블리 과정 링킹 과정
    Unreal C++   전처리 과정 - UBT - UHT (헤더 처리) - 컴파일 과정 (cpp 처리) - 어셈블리 과정 (obj 파일)
    - 언리얼 Module 결과 .dll파일

     

    언리얼에서 빌드를 시작하면 컴파일러가 컴파일을 수행하기 전에 언리얼 빌드 툴(UBT)과 언리얼 헤더 툴(UHT)이 콜 되어먼저 실행된다.

     


     

     

    언리얼 빌더 툴(Unreal Builder Tool, UBT)

     

    UBT는 프로젝트의 빌드 프로세스를 관리한다. UBT는 처음에 호출되며, 이는 전체 빌드 프로세스를 관리한다. 

    UBT는 어떤 소스 코드 파일들이 변경되었는지를 확인하고, 그에 따라 어떤 부분을 새롭게 컴파일할 것인지 결정한다.

     


     

     

    언리얼 헤더 툴(Unreal Header Tool, UHT)

     

    언리얼 헤더 툴은 .generated.h를 통해 헤더파일을 수집하고, UClass나 UStruct 매크로를 찾아 리플렉션 정보를 수집한다. 그 후, 리플렉션 객체를 생성하기 위해 필요한 요소들을 GENERATED_BODY() 부분에 자동으로 생성하는 등의 역할을 수행한다.

     

       
    매크로 처리   UHT는 언리얼의 리플렉션 시스템에 필수적인 매크로를 처리한다. 
      이 매크로들은 클래스, 함수, 속성 등을 언리얼 엔진의 메타데이터 시스템과 연결한다.
    코드 생성   UHT는 분석된 매크로 정보를 바탕으로 자주 반복되는 작업이나 패턴에 대한 표준화된 코드를 생성한다.
      이 코드들은 게임 실행 시간에 언리얼이 클래스와 속성에 접근하거나 조작할 수 있게 해준다.
    검증   UHT는 또한 언리얼 C++ 코드의 일부 유효성 검사도 수행한다.
      예를 들어, 어떤 클래스가 특정 기본 클래스에서 올바르게 파생되었는지, 필요한 함수들이 제대로 구현되었는지 등을 확인할 수 있습니다.

     

    이런 방식으로 UHT는 개발자가 작성한 C++ 코드와 언리얼 엔진 사이의 '다리' 역할을 수행한다.

     

     


     

     

    UBT와 UHT의 호출 시점

     

    일반적으로 UBT가 먼저 호출되며, 필요에 따라 UHT가 호출된다. 이후 실제 C++ 컴파일 과정이 진행된다

     

       
     Unreal Build Tool(UBT)   이 도구는 소스 코드 파일이 변경되었을 때 새롭게 컴파일해야 할 부분을 결정하고, 필요한 경우 UHT를 호출하여 헤더 파일을 처리하도록 한다. 
      그 후, UBT는 실제 C++ 컴파일러(예: MSVC, Clang 등)를 사용하여 소스 코드를 컴파일합니다.
     Unreal Header Tool(UHT)   UHT는 C++ 코드를 컴파일하기 전에 호출된다.
      이 도구는 UE 매크로를 분석하고 처리하여 리플렉션 시스템을 위한 코드를 생성한다.