본문 바로가기

Library/Windows Programming

PCH 수동 설정하기

MFC는 적당한 솔루션을 제공하는 괜찮은 라이브러리지만, Doc / View 구조는 너무 개발자를 프레임워크로 몰아넣고 개발을 강요하는 단점이 있다.

단순히, MFC 클래스를 이용하고, Doc / View 구조를 사용하지 않는 방법도 있지만, 이럴 경우 라이브러리 링크부터 리소스 추가까지 IDE 환경을 도움을 거의 받을 수 없기 때문에 상당한 고통이 뒤따른다. Precompiled Header를 사용하는 것도 수동으로 설정하기 까다로운 부분 중 하나인데, AppWizard를 사용하여 프로젝트를 생성했다면 stdafx.h에 프로젝트에서 사용할 설정을 간단히 추가하는 것만으로 모든 것이 끝나지만, Empty Project부터 시작했다면 Precompiled Header를 사용하기 위해 좀 더 복잡한 일을 해야 한다.

Precompiled Header란, 컴파일 시간을 줄이기 위해 중복되는 헤더파일들을 미리 컴파일해두고, 소스에서 이 헤더를 참조할 때마다 다시 컴파일 할 필요가 없도록  PCH 형태로 생성된 헤더 파일을 말한다. Visual Studio의 프로젝트 템플릿으로부터 프로젝트를 파생시켰다면, 기본적으로 이 PCH 파일은 stdafx.h로부터 생성되게 되어있다. 그래서 아무 것도 존재하지 않는 무(無)의 상태에서 출발했고, Precompiled Header를 사용하기로 마음 먹었다면 손수 설정을 해주어야 한다. 먼저, pch 파일을 생성하기 위해, 어떤 헤더 파일로부터 pch 파일을 생성할지 결정한다. 헤더 파일을 하나 새로 추가하고, 이름을 stdafx.h로 하고 프로젝트에 추가한다. 이 헤더파일의 이름은 어떻게든 해도 상관없지만, 그럴 경우 C/C++ Precompiled Header 옵션에서 그 파일 이름을 명시해야 한다. 그리고 적당한 이름으로 소스 파일을 하나 추가하고, 이 파일에서 pch 파일로 만들 헤더 파일(여기서는 stdafx.h) include 한다. 이 소스 역시 프로젝트에 추가한다.

다음, 프로젝트 프로퍼티를 열어서 C/C++ 부분에서 Precompiled Headers의 Create/Use Precompiled Header 옵션을 Use Precompiled Header (/Yu)를 선택한다.

그리고, Solution Explorer에서 stdafx.h 헤더를 포함하는 소스 파일의 Property를 열어서 Precompiled Header 옵션에서 Create Precompiled Header (/Yc)를 선택한다.

즉, 간단히 말해 stdafx.h를 포함하는 다른 모든 파일들은 Use Precompiled Header (/Yu)를 선택해 미리 만들어진 PCH를 이용해야 하며, stddafx.cpp는 Create Precompiled Header (/Yc) 옵션으로 PCH 파일을 생성하도록 해야 한다.

설정을 끝냈다면, 해당 .cpp 파일마다 stdafx.h를 인클루드하여 사용한다.