Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
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
Archives
Today
Total
관리 메뉴

codingfarm

프로젝트 셋팅 - 미리 컴파일된 헤더(Precompiled Header) 본문

Programming Language/C++

프로젝트 셋팅 - 미리 컴파일된 헤더(Precompiled Header)

scarecrow1992 2021. 5. 5. 23:00

noirstar.tistory.com/12

gamedevforever.com/134

docs.microsoft.com/ko-kr/cpp/build/creating-precompiled-header-files?view=msvc-160

 

정의

미리컴파일된 헤더(precompiled header)는 이름 그대로 헤더를 미리 컴파일 하는것이다.

자주수정되지 않는 거대한소스(ex : windows.h)를 미리 컴파일하여 컴파일결과를 별도의 파일에 저장하여, 다시 똑같은 헤더를 컴파일시 해당파일을 처음부터 컴파일하지않고 미리컴파일된 헤더 파일을 사용해 컴파일 속도를 월등히 향상시켜준다.

 

도입 배경

코딩을 하다 보면 프로젝트의 몸집이 커지게 되고, 그에 비례하여 컴파일 타임도 기하급수적으로 늘어나게 된다. 단지 코드 몇줄 수정하고 추가 했을 뿐인데 매번 컴파일 타임이 수분~수십분 걸리게 되면 작업의 리듬도 깨지게 되고 프로그래머의 능률은 저하되게 된다. 그래서 빌드 타임을 최소화 하기 위한 여러 기법들이 있다.

 

원리

미리 컴파일 된 헤더를 만들면 pch 라는 파일이 생성 되는데 컴파일러는 이를 참조하여 프로젝트 컴파일을 수행하게 된다. 미리 컴파일 시킨 헤더를 참조하니 기존에 헤더 파일을 일일히 파싱하던 때에 비해서 컴파일 속도가 빠른 것 이다.

미리 컴파일된 헤더 파일을 사용하는 메이크파일의 구조 이미지 출처 : MSDN

 

 

사용법

미리 컴파일된 헤더의 속성을 /Yu로 설정한다.

 

앞서 설정했던 이름의 헤더파일을 생성

 

생성된 cpp파일의 속성창을 연다

 

속성을 /Yc로 수정한다.

 

이제 pch.cpp파일에 #include"pch.h" 코드를 넣는다.

미리 컴파일할 모든 헤더들을 pch.h에 넣은 후, pre-compiled header를 사용할 모든 파일에 pch.h를 include 하면 된다.

 

 

컴파일 시간 줄이기 팁

 

1
2
3
4
5
6
// Foo.h  
#include "Bar.h"  
class Foo  {  
private:  
    Bar mBar;  
};  
cs

Foo 클래스에 Bar 클래스를 멤버변수로 가지고 있다.

위와 같은 상황에서 Bar 클래스의 소스코드에 수정이 일어나 재컴파일해야한다면, 이를 포함중인 Foo도 재컴파일을 해야 한다.

하지만 아래와 같은 방법으로 다른 클래스의 수정에 대해 자유로워 질 수 있다.

 

1
2
3
4
5
6
7
8
9
10
// Foo.h  
class Bar;
class Foo  {  
private:  
    Bar *mBar;  
};  
 
 
// Foo.cpp  
#include "Bar.h"  
cs

Foo.h 내에선 Bar 멤버변수를 포인터로 바꾸었고, include를 안하는 대신 전방선언을 하였다.

그리고 Bar 클래스를 사용하는 본문파일에 include를 추가했다.

이런 방법을 통해 Foo.h는 Bar의 수정에 의한 재컴파일로부터 자유로워질 수 있다.

 

 

 

 

 

 

 

 

 

 

 

'Programming Language > C++' 카테고리의 다른 글

출력 디렉토리  (0) 2021.05.07
정적 라이브러리  (0) 2021.05.06
map 활용  (0) 2021.04.22
vector 정렬하기  (0) 2021.04.21
std::initializer_list  (0) 2021.04.17
Comments