DXR프로젝트를 진행하던 중에 프로젝트 몸집이 불어날 수록 rebuild하는데 방대한 시간이 소요된다는 것을 체감했다(30초정도). 이 빌드 시간을 어떻게 줄일 수 있을지 알아봤는데, c++20 module, pimple idom, Pre compiled header등등의 방법을 찾을 수 있었다.
이중 Pre Compiled Header가 설정이 제일 만만할 것 같아서 한번 적용해 보았다.
적용 방법은 간단하다.
ProjectProperty-> c++ -> PreCompiled Header에 들어가서
프로젝트에 있는 모든 source가 PCH를 쓰겠다는 use(/Yu)설정,
PCH파일의 이름 설정, PCH의 아웃풋 파일(.PCH)의 빌드 위치 설정을 적용해준다.내가 설정한 PCH파일의 이름.h 헤더파일과 PCH파일의 이름.cpp 를 프로젝트에 생성한다.
pch.cpp파일의 property에 들어가 pre compiled header-> create(/YC) 설정을 해준다. 이 설정은 이 cpp파일은 빌드 시 Pre Compiled Header(.pch)파일을 빌드하게 된다는 설정이다.
모든 cpp파일에서 #include "pch.h"를 명시해 pch파일을 사용한다.
PCH적용 전:
빌드시간=> 30초
PCH적용 후:
빌드시간=> 7초
앞에서는 PCH의 빌드시간에서의 장점만 언급했지만, PCH는 항상 좋은 녀석이 아니다.
PCH는 빌드 전에 pch.h파일의 수정여부를 체크한 후에 수정이 발생했을 시 .pch파일을 다시 컴파일하게된다. 이는 PCH의 장점을 사용할 수 없음을 의미한다(빌드시간의 축소).
그러므로 PCH는 다음과 같은 전략으로 사용하는 것이 좋다.
- 컴파일러 버전을 바꾸지 않는한 바뀌지 않는 언어단에서 제공하는 헤더파일
#include <vector> #include <algorithm> #include <map>
- 크기가 방대한 헤더파일
#include <windows.h> #include <d3d12.h>