일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
- directx
- 게임엔진튜토리얼
- 자료구조정리
- 월드아웃라이너
- 각도변환
- livrary
- c++class
- c++
- 영단어정리
- 자료형타입
- 게임개발
- uaiperception
- unrealengineai
- 수학용어정리
- 언리얼엔진공부
- c언어정리
- 언리얼비헤이어비어트리
- 25.06.11dir
- 언리얼엔진
- DX
- 언리얼ai
- c++porinter
- 프로그래밍일기
- 언리얼엔진5
- 프로그래밍
- c++용어정리
- ipc(inter process communication)
- 자료구조
- leveleditor
- bttask
- Today
- Total
루리코딩 세상
미리 컴파일 된 헤더(Precompiled Header : PCH) 본문
미리 컴파일 된 헤더를 사용했을 때에 얻어지는 효과는 컴파일 속도 향상을 기대할 수 있다.
#include <windows.h>, #include <d3d11.h>, #include <DirectXMath.h>
같은 헤더들은 내부적으로 수천 줄의 코드와 종속성이 있는데,
이런 헤더들을 매번 소스파일마다 컴파일하면 시간이 엄청나게 느려진다.
PCH는 이걸 한번만 컴파일 해서 캐시처럼 저장해두고,
이후 빌드 시 재사용하는 코드 재사용성을 높여, 무거운 헤더들의 속도를
단축시키는 효과를 얻을 수 있다.
또한, 모든 파일이 같은 공통 헤더를 참조하게 되어, 중복 정의/헤더 누락 등의 기초적인 실수를
사전에 예방하고 줄일 수 있는데 PCH를 통해 공통 설정, 타입, 유틸리티 등을 하나로 정리가 가능하다.
DirectX 프로젝트에서 PCH가 특히 유리한 이유
많은 헤더 | DirectX는 windows.h, d3d11.h, dxgi.h, d3dcompiler.h, DirectXMath.h 등 여러 무거운 헤더를 포함 |
반복 사용 | 거의 모든 렌더링 소스파일에서 동일한 DirectX 헤더들을 반복해서 사용함 |
컴파일 부하 큼 | 셰이더 컴파일러 등은 내부적으로 엄청난 매크로/타입 정의 포함 |
예시로 사용할 코드를 보면 다음과 같다.
// pch.h
#pragma once
#include <windows.h>
#include <wrl/client.h> // Microsoft::WRL::ComPtr
#include <d3d11.h>
#include <d3dcompiler.h>
#include <DirectXMath.h>
#include <dxgi.h>
#include <string>
#include <vector>
#include <memory>
헤더를 다음과 같이 설정한 뒤 .cpp에 파일 가장 위에는 다음을 넣으면 활성화 시킬 수 있다.
#include "pch.h"
DriectX의 예제를 작성하면서 많은 헤더를 반복적으로 사용하게 될 것을 예견할 수 있었으나,
PCH를 활용함으로서 컴파일의 시간을 획기적으로 단축, 프로젝트 관리도 쉬워지는 것을 배울 수 있었다.
특히나 "미리 컴파일된 헤더(PCH)"와 "라이브러리(Library)"에 차이점에 대해서 비교하며 핵심적인 차이를
GTP를 이용해서 정리된 내용을 추가한다.
📘 1. 미리 컴파일된 헤더 (Precompiled Header, PCH)
항목 | 설명 |
❓ 개념 | 자주 사용하는 헤더 파일을 미리 컴파일해 두고, 빌드 시간 단축을 위해 재사용하는 파일 |
🧠 목적 | 컴파일 속도 향상 |
📦 내용 | 헤더 파일(.h)의 전처리 결과(매크로, 선언, 구조체 등) |
🔁 용도 | 같은 헤더를 반복 include할 때 컴파일러가 다시 파싱하지 않도록 |
🎯 사용 예 | <windows.h>, <d3d11.h> 같이 무겁고 자주 쓰이는 헤더들 |
🛠 생성 방식 | 보통 pch.h와 pch.cpp로 구성되어 자동 생성됨 (Visual Studio 기준) |
📦 2. 라이브러리 (Library)
항목 | 설명 |
❓ 개념 | 함수, 클래스, 자료구조 등의 **실제 구현(코드)**을 모아놓은 컴파일된 코드 덩어리 |
🧠 목적 | 코드 재사용 / 기능 분리 / 배포 용이성 |
📦 내용 | .lib, .dll, .a, .so 파일로 존재 |
🔁 용도 | 함수를 호출하거나 클래스를 사용할 때, 그 기능을 실행하는 코드 |
🎯 사용 예 | DirectX의 d3d11.lib, 수학 라이브러리 DirectXMath.lib, 사운드 xaudio2.lib 등 |
🛠 생성 방식 | 여러 .cpp들을 컴파일해서 만든 구현 라이브러리 or 외부에서 제공받음 |
🆚 PCH vs Library: 핵심 차이 요약
구분 | 미리 컴파일 된 헤더(PCH) | 라이브러리 (Library) |
역할 | 컴파일 최적화용 캐시 | 코드 기능 묶음/실행 구현체 |
내용 | 전처리된 헤더 정보 | 컴파일된 함수/클래스 구현체 |
파일 형식 | .pch, .gch 등 | .lib, .dll, .a, .so 등 |
목적 | 속도 향상 (컴파일) | 기능 제공 (링크/실행) |
예시 | pch.h, stdafx.h | d3d11.lib, DirectXTK.lib |
미리 컴파일 된 헤더(PCH) 설정하기
헤더 파일을 만들어서 자주쓰는 헤더를 미리 컴파일하고, 모든 소스 파일이 이 PCH를 사용하도록 설정해보자.
Debug - 구성관리자 - 활성 솔루션 플랫폼 제거
구성파일 목록 (예제)
UnitTest
- Freamwork.h
- Freamwork.cpp
//미리 컴파일된 헤더로 사용할 것이고, 자주 쓰는 헤더를 모아두는 공간 “stdafx.h”로 지정할 것이다.
속성 → 기본적인 속성에 C/C++탭이 없기때문에 기본 설정을 해줘야한다.
기본 설정을 하는 방법은 https://rucoding.tistory.com/64
절대 경로와 상대 경로의 차이점
정의절대 경로와 상대 경로는 파일이나 웹 리소스의 위치를 나타내는 방식의 차이점을 나타낸다. 절대 경로는 파일의 최상위 디렉토리 부터 시작하여 해당 파일까지의 전체 경로를 지정하며,
rucoding.tistory.com
에서 진행했었던 상대 경로 지정법을 활용해서 추가 포함 디렉터리를 지정 할 수 있다.
즉 Include에 기본적으로 포함 될 수 있도록 지정해주는 것이다. 이를 통해서 추가 포함된 기본적인 폴더들로
PCH 기능을 활용이 가능해진다.
'이론 > DirectX' 카테고리의 다른 글
Time 관련 (0) | 2025.06.02 |
---|---|
DirectX 윈도우 창 띄우기 (0) | 2025.06.01 |
래스터라이즈(Rasterize)란? (0) | 2025.05.30 |
DirectX에 관하여 기본적인 지식 뼈대 만들기 (4) | 2025.05.29 |
DirectX 관련 라이브러리 (0) | 2025.05.28 |