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 Sources
或Link Binary With Libraries
选择要排除的类或库并点击-
不应再使用该目标编译该类。
【讨论】:
谢谢,但我在 Build Phases > Compile Sources 中看不到该类文件。 静态库的一部分。 你是如何链接静态库的?看来图书馆本身可能是这里的问题。 我已经将 iOS 目标的静态库添加到 Build Phases > Link binary with Libraries 中。但是对于 OS X 目标,这些没有链接。我的理解是它不应该包含这些文件。对吗? 正确。您可能需要转到Product
> Manage Schemes
并为OS X
目标重新创建一个。如果静态库可用于OS X
和iOS
并且您正在从源代码编译它,那么您应该能够包含ifdef
语句以避免UIKit
上的UIKit
导入。但目前尚不清楚您是否使用 OS X
的静态库。以上是关于iOS 和 OS X 目标的通用预编译标头的主要内容,如果未能解决你的问题,请参考以下文章
使用 Qt Creator / qmake / MinGw 的预编译标头无法在调试版本中工作