2016-08-12 1 views
0

내 prefix.pch 파일에 주어진 가져 오기 문이 VMKChilkatWrapper.h이라는 특정 .h 파일에 추가되지 않도록하려면 어떻게해야합니까?Prefix.pch : 특정 파일에 사용하지 않는 방법은 무엇입니까?

나는 다음 시도했다 :

#if !__has_include("VMKChilkatWrapper.h") 
#if !strcmp(__FILE__, "VMKChilkatWrapper.h") 
#if !strcmp(__BASE_FILE__, "VMKChilkatWrapper.h") 

하지만 시도조차 시간 후, 나는 그것이 작동 할 수 없습니다. 이것이 가능한가?

왜 이렇게하고 싶습니까?

나는 약간의 .mm 개의 파일이있다 (Objective-C++). Objective-C 클래스를 가져올 때 더 이상 @import을 사용할 수 없습니다.

따라서 내 .mm 파일로 가져온 유일한 클래스 인 래퍼 클래스를 만들었습니다.

내 Prefix.pch 파일에도 #ifdef __OBJC__을 사용하여 Objective-C 헤더 파일을 내 .mm 파일로 가져 오지 않도록하십시오.

그러나 #ifdef __OBJC__은 내 Prefix.pch 파일이 VMKChilkatWrapper에 포함되는 것을 막지 않습니다. 따라서 내 Prefix.pch 파일에있는 파일에 대해 @import 지시문이 작동하지 않습니다.

현재로서는 Prefix.pch 파일의 가져 오기 명령문을 제거하는 것이 가장 좋은 해결책이라고 생각합니다.

+0

달성하려는 목표는 무엇입니까? 가져온 접두사가 왜 귀찮게합니까? –

+0

제 질문에 대한 설명을 추가했습니다. – vomako

답변

1

나는 @import을 사용하지 않을 것을 제안했습니다. 대신 오래된 패션 인 #import을 사용하십시오. 어려움이있는 경우 Swift처럼 @import의 정확한 위치 만 사용해야합니다.

하나의 가능한 솔루션이 있습니다. #ifdef __OBJC__ #ifndef __cplusplus#endif #endif 블록에 가져 오기하십시오. 예

#ifdef __OBJC__ 
#ifndef __cplusplus 
@import ... 
#endif 
#endif 
+0

'#ifndef __cplusplus'를 추가하면 작동합니다. 고맙습니다! – vomako

0

수 없습니다.

접두어 헤더는 컴파일되기 전에 모든 구현 파일에 추가됩니다. 현재이 파일에 포함 된 다른 헤더 파일에 대한 정보는 없습니다.

필요한 경우 잘못하고 있습니다. 접두사 헤더의 유일한 목적은 일부 프레임 워크 헤더를 사전 컴파일하여 컴파일 속도를 높이는 것입니다. 거기에 물건을 추가하면 모든 구현 파일에서 사용할 수 있으므로 안티 패턴이됩니다.