iOS 和 OS X 目标的通用预编译标头

Posted

技术标签:

【中文标题】iOS 和 OS X 目标的通用预编译标头【英文标题】:Common Pre-Complilation Header for iOS and OS X Targets 【发布时间】:2015-05-13 00:18:42 【问题描述】:

我有一个在 ios 和 OS X 目标之间共享代码的项目。 iOS 目标编译良好。但是 OS X 目标以某种方式包含一个特定的静态库类,该类导入 UIKit 框架,并且由于显而易见的原因引发错误。我不需要在 OS X 目标中包含该类别。我已经从文件检查器中该文件的目标成员选项卡中取消选择 OS X 目标。作为 OS X 开发的新手,在为 OSX 编译时,我不知道在哪里不包括该类。我可能做错了什么?

【问题讨论】:

【参考方案1】:

标题应该类似于:

#if TARGET_OS_IPHONE
// iOS code
#import <UIKit/UIKit.h>
#endif

#ifdef __OBJC__
#import <Foundation/Foundation.h>
#endif

XCode:

    选择要从中排除类或库的目标 点击Build Phases > Compile SourcesLink Binary With Libraries 选择要排除的类或库并点击-

不应再使用该目标编译该类。

【讨论】:

谢谢,但我在 Build Phases > Compile Sources 中看不到该类文件。 静态库的一部分。 你是如何链接静态库的?看来图书馆本身可能是这里的问题。 我已经将 iOS 目标的静态库添加到 Build Phases > Link binary with Libraries 中。但是对于 OS X 目标,这些没有链接。我的理解是它不应该包含这些文件。对吗? 正确。您可能需要转到Product > Manage Schemes 并为OS X 目标重新创建一个。如果静态库可用于OS XiOS 并且您正在从源代码编译它,那么您应该能够包含ifdef 语句以避免UIKit 上的UIKit 导入。但目前尚不清楚您是否使用 OS X 的静态库。

以上是关于iOS 和 OS X 目标的通用预编译标头的主要内容,如果未能解决你的问题,请参考以下文章

使用 Qt Creator / qmake / MinGw 的预编译标头无法在调试版本中工作

预编译标头 IntelliSense 错误

未能发出预编译的标头

如何使用 g++ 包含预编译的 .h.gch 标头

在 ac-docker win10 中编译时出现构建错误,要求重建已编译的标头,因为自预编译标头以来文件已被修改

无法为本地pod框架桥接标头发出预编译头