2009-10-20 7 views
2

MIDL 도구를 사용하여 특정 헤더/iid 및 프록시 파일을 만드는 프로젝트가 있습니다. 이러한 파일은 nmake를 호출하는 빌드 빌드 단계를 사용하여 컴파일되고 나머지 프로젝트와 연결됩니다.미리 컴파일 된 헤더를 MIDL 생성 파일과 함께 사용할 수 있습니까?

IDL 생성 파일과 함께 미리 컴파일 된 헤더를 사용할 수 있습니까? #include "stdafx-h"을 삽입하고 다른 포함 된 헤더를 제거하려면 어떻게해야합니까?

+0

MIDL 도구에서 생성되는 파일의 종류, 포함되는 내용 및 그 파일과 PCH의 관련성을 명확히 할 수 있습니까? – MSalters

답변

1

/FI option (강제 포함) : "이 옵션은 CL 환경에서 명령 줄에 지정된 모든 소스 파일의 첫 줄에 #include 지시문에 큰 따옴표로 파일을 지정하는 것과 동일한 효과가 있습니다 변수 또는 명령 파일에서. "

다른 헤더를 제거하지 않지만 미리 컴파일 된 헤더를 사용할 필요는 없습니다. 사전 컴파일하려는 모든 헤더는 stdafx.h에 포함되어야합니다. 그런 다음 파일에 포함 가드가 있으면 원본에 다시 포함될 때 문제가되지 않습니다.

생성 a.cpp 파일 :

#include <a.h> 
#include <b.h> 
//rest of the code 

당신이 a.hb.h를 미리 컴파일 할 가정하자.

#include <a.h> 
#include <b.h> 

을 그리고 당신이 STDAFX.H가 a.cpp에 첫 번째 파일로 포함해야하는/FI 옵션을 사용 : 그럼 당신은 파일에 stdafx.h을 만듭니다. 파일 a.hb.ha.cpp에서 그들을 떠나, include guards이있는 경우

+0

작동하지 않을 것입니다. 왜냐하면'#include '은 소스 파일의 정상적인 컴파일이 다시 시작되는 시점을 구분하기 때문입니다. – MSalters

+0

@MSalters 실제로 stdafx.h를 포함하면 정상 컴파일이 다시 시작됩니다. 하지만 문제가 보이지 않습니다 ... stdafx.h에는 나머지 파일도 모두 포함되어 있습니다. 다시 포함 시키면 문제가 발생하지 않으며 그렇지 않은 경우 왜 나머지 파일을 제거할까요? 파일? –

+1

@MSalters : 내 대답이 업데이트되었습니다. 그 대답은 –

0

"에 stdafx.h는"단지 대회입니다 ... 문제가되지 않습니다. 생성 된 소스 파일에 항상 포함 된 헤더의 표준 접두어가있는 경우, /Yu 스위치에서 마지막 이름을 지정할 수 있습니다 (미리 컴파일 된 헤더 사용). PCH를 만들려면 고정 머리글 만 사용하여 단일 .cpp 파일을 만들고 iith를 /Yc으로 컴파일하십시오.

관련 문제