Precompiled Header(미리 컴파일된 헤더)?
- Visual Studio에서 새 프로젝트를 만들 때 .pch.h라는 미리 컴파일된 헤더 파일이 프로젝트에 추가 된다.
(2017 버전 이하 버전에서는 파일을 stdafx.h라고 한다)
2017이상 버전
이 파일의 목적은 빌드 프로세스의 속도를 높이는 것이다.
C / C++ 언어에서 헤더 파일은 C 전처리기에 의해 자동적으로 소스 코드를 포함하게 된다.
그런데 일부 헤더 파일의 경우 방대한 크기의 소스 코드를 포함 할 수 있고,
이런 코드들을 매번 컴파일하면 컴파일 시간이 매우 길어지게 된다.
그래서 자주 바뀌지 않는 기본적인 라이브러리들의 경우에 컴파일 시간을 줄이고자
컴파일러가 사전에 헤더 파일들을 미리 컴파일 해 놓고 쓸 수 있게 한다.
Precompiled Header를 사용할 경우 Precompiled Header로 지정한 헤더 파일 및 소스 코드는
컴파일시에 컴파일 되지 않고 pch의 결과물을 가져다 사용하게 되는 것이다.
프로젝트 속성 > C / C++ > 미리 컴파일된 헤더 항목에서 사용 여부를 선택할 수 있다.
빈프로젝트에서는 이것이 사용 안함으로 체크 되어 있는데, 이 경우 매번 전체 헤더파일을 재빌드 하게 되므로
사용 안함으로 체크되어 있다면 아래와 같이 만들기를 선택해서 pch를 만들어 주고
Precompiled Header 사용하기를 선택하면 사용 할 수 있게 된다.
pch는 한 번 미리 빌드를 해 놓고 그 다음부터는 재빌드를 하지 않은 상태로 사용하는 모듈들이 되야 하므로,
pch에는 프로젝트 진행 중에 값이 거의 바뀌지 않는 외부 라이브러리나 전역 변수 등의 내용을 포함시키면 된다.
이렇게 하면 매번 재빌드 하지 않고 컴파일 시간을 많이 줄일 수 있다.
▶주의점
미리 컴파일된 헤더에 포함된 파일이 수정이 일어나면 미리 컴파일된 헤더도 새로 만들게 된다.
이렇게 되면 미리 컴파일된 헤더를 사용하는 의미가 없어지게 된다.
그래서 어떤 헤더 파일을 미리 컴파일 시켜야 해야 할까?...
MSDN을 보면 다음 사항에 미리 컴파일된 헤더 파일 사용을 권장하고 있다.
■ 자주 바뀌지 않고 크기가 큰 코드 본문을 항상 사용
■ 프로그램이 여러개의 모듈로 구성되어 있으며,
모든 모듈이 포함 파일의 표준 집합 및 동일한 컴파일 옵션을 사용
이 경우 모든 포함 파일을 미리 컴파일해서 하나의 미리 컴파일된 헤더로 만들 수 있다.