Prefix.pch: 如何不对某些文件使用它?
Prefix.pch: how to not use it for certain files?
如何避免我的 prefix.pch 文件中给出的导入语句被添加到名为 VMKChilkatWrapper.h
的某个 .h 文件中?
我试过以下方法:
#if !__has_include("VMKChilkatWrapper.h")
#if !strcmp(__FILE__, "VMKChilkatWrapper.h")
#if !strcmp(__BASE_FILE__, "VMKChilkatWrapper.h")
但即使经过几个小时的尝试,我还是无法让它工作。这可能吗?
我为什么要这样做?
我有几个 .mm
个文件 (Objective-C++)。当我将 Objective-C classes 导入其中时,我无法再使用 @import
。
因此,我创建了一个包装器 class,这是唯一 class 导入到我的 .mm
文件中的包装器。
我还在我的 Prefix.pch 文件中使用 #ifdef __OBJC__
以避免我的 Objective-C 头文件被导入到我的 .mm
文件中。
但是,#ifdef __OBJC__
不会阻止我的 Prefix.pch
文件被包含在 VMKChilkatWrapper
中。因此,@import
指令不适用于我的 Prefix.pch
文件中的任何文件。
目前,我认为最好的解决方案是删除我的 Prefix.pch
文件中的导入语句。
你不能。
前缀header在编译之前添加到每个实现文件。目前没有关于该文件中包含的其他 header 个文件的信息可用。
如果你需要这个,那你就做错了。 prefix headers 的唯一目的是通过预编译一些框架 headers 来加快编译速度。只需在其中添加内容,以便在每个实现文件中可用,就是 anti-pattern.
我建议不要使用 @import
。使用旧时尚 #import
。
如果你对此有困难,那么只在你需要的地方使用 @import
,比如 Swift
.
还有一种可能的解决方案。
将你的导入放在 #ifdef __OBJC__ #ifndef __cplusplus
#endif #endif
块中。
例子
#ifdef __OBJC__
#ifndef __cplusplus
@import ...
#endif
#endif
如何避免我的 prefix.pch 文件中给出的导入语句被添加到名为 VMKChilkatWrapper.h
的某个 .h 文件中?
我试过以下方法:
#if !__has_include("VMKChilkatWrapper.h")
#if !strcmp(__FILE__, "VMKChilkatWrapper.h")
#if !strcmp(__BASE_FILE__, "VMKChilkatWrapper.h")
但即使经过几个小时的尝试,我还是无法让它工作。这可能吗?
我为什么要这样做?
我有几个 .mm
个文件 (Objective-C++)。当我将 Objective-C classes 导入其中时,我无法再使用 @import
。
因此,我创建了一个包装器 class,这是唯一 class 导入到我的 .mm
文件中的包装器。
我还在我的 Prefix.pch 文件中使用 #ifdef __OBJC__
以避免我的 Objective-C 头文件被导入到我的 .mm
文件中。
但是,#ifdef __OBJC__
不会阻止我的 Prefix.pch
文件被包含在 VMKChilkatWrapper
中。因此,@import
指令不适用于我的 Prefix.pch
文件中的任何文件。
目前,我认为最好的解决方案是删除我的 Prefix.pch
文件中的导入语句。
你不能。
前缀header在编译之前添加到每个实现文件。目前没有关于该文件中包含的其他 header 个文件的信息可用。
如果你需要这个,那你就做错了。 prefix headers 的唯一目的是通过预编译一些框架 headers 来加快编译速度。只需在其中添加内容,以便在每个实现文件中可用,就是 anti-pattern.
我建议不要使用 @import
。使用旧时尚 #import
。
如果你对此有困难,那么只在你需要的地方使用 @import
,比如 Swift
.
还有一种可能的解决方案。
将你的导入放在 #ifdef __OBJC__ #ifndef __cplusplus
#endif #endif
块中。
例子
#ifdef __OBJC__
#ifndef __cplusplus
@import ...
#endif
#endif