'C2859'에 해당되는 글 1건

  1. 2009/03/03 VC++ Empty Project에서 Precompiled Header 설정하는 법

VC++에서 IDE환경에서 만들어주는 프로젝트가 아닌 순수히 자신만의 H/CPP로 프로그램을 만들 때가 있다.
(보통 게임 만들때겠지.)
이럴 경우, 대게 Empty Project로 설정하여 프로젝트만 만들고 헤더와 구현 파일을 추가한다.
그리고 Empty Project로 시작할 경우, Precompiled Header 체크는 아예 Disable 되어 있음을 우리는 알고 있다.

그러나 어찌어찌하여 Precompiled Heeader를 사용하고 싶어질 때가 있을 것이다.
Precompiled Heeader를 만드는 법은 쉽다. 가장 많이 쓰는 stdafx.h/cpp를 만들던가, 그에 준하는 헤더파일을 만들어 넣으면 된다.
그리고 Property Pages의 C/C++ -> Precompiled Heeads 항목으로 가서 Create Precompiled Header (/Yc)해서 리빌드를 하고 그 후부턴 Use Precompiled Header (/Yu)로 지정해서 사용한다.

문제는 이 경우, 다시 리빌드를 하게 되면 C1083이나 C2859처럼 pch파일이 없다던가, 버전이 다르다던가 하는 별 짜증나는 에러를 내뱉는다.

더욱 짜증하는 것은 IDE가 자동으로 만들어주는 프로젝트는 항상 Use Precompiled Header (/Yu)로 되어 있어도 일반적인 빌드와 리빌드 둘다 다 잘 먹는다는 점이다. 상당히 자존심 상하는 일이 아닐수 없다, 아니 그전에 리빌드 할때마다 속성을 바꾼다는 것은 일괄빌드 정책에 어긋난다.

이렇게 되는 이유는 MSDN이나 인터넷에서 Precompiled Header 설정하는 법만 나와있고 무책임하게 그와 짝지어진 CPP 파일에 대한 처리 방법이 없어서이다(구글링을 해보니 이런 에러가 나오면 아예 Precompiled Header를 사용하지 말라는 답변들이 대부분이어서 놀랬다. -0-;;;).

방법은 쉽다. stdafx.h라고 한다면 stdafx.cpp만 항상 Create Precompiled Header (/Yc)로 해주면 간단히 처리된다. 프로젝트 속성이 아닌 해당 CPP 파일 속성으로 들어가 변경해주자. 빌드를 하던 리빌드를 하던 귀찮은 일에서 해방이다.

아래 짤방은 언제나 인기좋은 Text3D 예제에 설정된 Precompiled Header속성이다.
IDE가 만들어주는 모든 프로젝트는 이와 같이 설정되어 있다.

stdafx.h 대신 dxut.h를 썼지만 그게 그거고 항상 Precompiled Header를 사용하겠다고 적혀있다.

stdafx.h 대신 dxut.h를 썼지만 그게 그거고 항상 Precompiled Header를 사용하겠다고 적혀있다.

해당 헤더의 CPP파일은 항상 Create Precompiled Header로 설정해줘야 한다.

해당 헤더의 CPP파일은 항상 Create Precompiled Header로 설정해줘야 한다.


Precompiled Header를 썼다고 빌드 속력이 증가하는가, 저하되는가, 사용해야 하는가, 사용하지 말아야 하는가는 프로젝트와 인클루드 상황에 따라 다릅니다. 이 포스트는 Precompiled Header를 써라고 적는 것이 결코 아닙니다.


 

크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by Rhea君