| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- c++
- 언리얼엔진5
- 게임개발
- unrealengineai
- 프로그래밍
- DX
- livrary
- 언리얼엔진공부
- c++class
- c++porinter
- 언리얼ai
- 언리얼엔진
- 영단어정리
- 자료구조정리
- 게임엔진튜토리얼
- 프로그래밍일기
- 언리얼비헤이어비어트리
- leveleditor
- directx
- bttask
- 25.06.11dir
- 자료형타입
- c언어정리
- 월드아웃라이너
- 각도변환
- 수학용어정리
- 자료구조
- c++용어정리
- uaiperception
- ipc(inter process communication)
- 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 |