링커, 헤더, 인클루드
머지않아 외부의 다른 파일에서 코드를 가져오게 되기 때문에, C++에서 해당 작업을 어떻게 수행하는지 알아야 한다.
이를 위해 C++ 컴파일 할 때의 주요 단계를 알아보게 된다.
먼저 코드, C++ 파일, 헤더 파일이 다양한 텍스트 파일 안에 포함되어있다.
해당 파일들은 언리얼 헤더 툴에 삽입되게 된다.
언리얼 헤더 툴은 언리얼의 특정 구문을 모두 C++ 코드로 변환해준다.
예를 들어 GENERATED_BODY를 언리얼 헤더 툴이 다양한 코드로 대체하게 된다.
즉, 블루프린트 월드와 통신한데 필요한 모든 것들을 다 추가해준다.
다음으로 C++ 컴파일 프로세스를 가지게 된다.
해당 프로세스를 아래와 같은 3가지 단계를 거치게 된다.
전처리 단계 -> 컴파일러 -> 링커
첫 번째로 전처리 단계는 C++ 구문을 건드리지 않고, #기호로 시작되는 지시어만 다루게 된다.
몇 가지의 지시어를 선언하고, 해당 지시어는 전처리기에 의해 처리된다.
두 번째로 컴파일러 단계는 코드를 실행 가능 바이너리로 변환하는 단계이다.
하지만 완전하게는 변환하지 못하는데, C++ 파일을 개별적으로 가져가 각각 독립적인 상태로 변환하기 때문이다.
마지막으로 링커 단계는 모든 파일들을 하나로 묶어서 실행 가능한 파일로 변환하는 과정이다.
예제를 통해 자세히 알아보자.
우선 1+1을 해야하는 game.cpp 파일이 존재한다.
더하기 기능을 사용하기 위해서는 math.h에 있는 add 함수가 필요하다.
math.h에 있는 add 함수는 어떤 작업을 수행하는지 정의되어있지 않기 때문에, math.cpp에서 add 함수를 정의하게 된다.
이제 전처리 단계로 game.cpp 파일에 math.h를 include해준다.
이제 game.cpp 파일에서 add 함수를 사용할 수 있다.
다음으로 컴파일 단계이다.
각각의 독립적인 파일들을 바이너리로 변환하게 된다.
여기서 game.cpp에서 add 함수에 대해 모양만 알고 실제 내용은 모르기 때문에 완전한 바이너리가 되지 못한다.
해당 작업은 링커 단계에서 해결된다.
컴파일 단계에서 생성된 바이너리들을 하나로 묶어서 실행 가능한 game.exe 파일을 생성하게 된다.
이러한 프로세스의 핵심은 컴파일 시간을 단축하는 것이다.
만약에 game.cpp 파일만 수정했다면 game.cpp에 대한 컴파일 프로세스만 실행하고, 전체에 대한 컴파일 프로세스를 할 필요가 없다.
math.h나 math.cpp에 대해서는 수정할 일이 없기 때문이다.
'Unreal > Udemy 강의' 카테고리의 다른 글
Unreal Engine 5 - C++ 개발자: C++ 학습하고 비디오 게임 제작하기 Section 4-15 (0) | 2024.03.21 |
---|---|
Unreal Engine 5 - C++ 개발자: C++ 학습하고 비디오 게임 제작하기 Section 4-14 (0) | 2024.03.21 |
Unreal Engine 5 - C++ 개발자: C++ 학습하고 비디오 게임 제작하기 Section 4-12 (0) | 2024.03.19 |
Unreal Engine 5 - C++ 개발자: C++ 학습하고 비디오 게임 제작하기 Section 4-11 (0) | 2024.03.19 |
Unreal Engine 5 - C++ 개발자: C++ 학습하고 비디오 게임 제작하기 Section 4-10 (0) | 2024.03.18 |