루리코딩 세상

미리 컴파일 된 헤더(Precompiled Header : PCH) 본문

이론/DirectX

미리 컴파일 된 헤더(Precompiled Header : PCH)

루리딩 2025. 5. 29. 09:42

미리 컴파일 된 헤더를 사용했을 때에 얻어지는 효과는 컴파일 속도 향상을 기대할 수 있다.

#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