【问题标题】:Tell Xcode to ignore a header for some targets?告诉 Xcode 忽略某些目标的标头?
【发布时间】:2011-01-02 22:37:07
【问题描述】:

我有一个带有 mac 目标和 iOS 目标的 Xcode 项目。该项目包含一个 IPhoneOnlyClass 类,仅在 iOS 目标中使用。我已取消选中 mac 目标中的 IPhoneOnlyClass.m,因此它不会编译该文件。

现在 IphoneOnlyClass.h 包含该行

#import <GameKit/GameKit.h>

当我为 mac 目标编译时,Xcode 给我一个错误:

错误:GameKit/GameKit.h:没有这样的文件或目录

我可以使用#ifdef 来解决这个问题,但有更好的方法吗?我宁愿告诉 Xcode 在编译 mac 目标时完全忽略标头。

【问题讨论】:

    标签: xcode macos ios header target


    【解决方案1】:

    首先,您不应该在特定于 Mac 或多平台的源文件中导入仅限 iPhone 的类头文件。

    如果这是不可避免的,那么您将需要使用预处理器宏(例如 TARGET_OS_MAC 与 TARGET_OS_IPHONE)来确定何时为您的仅限 iPhone 的类导入标头。

    另外,请确保您没有不小心将任何仅限 iPhone 的类添加到 Mac 目标的编译源构建阶段。

    【讨论】:

    • .m 文件不在编译源构建阶段。如何告诉 Xcode 不要查看标题?我不小心检查了 .m 文件以包含在以前的构建中,然后取消选中它。这会导致问题吗?其他头文件,对应于我从未放入目标的 .m 文件,没有同样的问题。
    • 问题是我的其他 .m 文件之一导入了它,我没有注意到。
    【解决方案2】:

    我不认为#ifdef 是不好的解决方案。如果您查看 UIKit 头文件,您会发现 Apple 使用了很多“#if”,例如:

    #if __IPHONE_4_0 <= __IPHONE_OS_VERSION_MAX_ALLOWED
    

    和

    #if TARGET_OS_MAC && !(TARGET_OS_EMBEDDED || TARGET_OS_IPHONE)
    

    (最后一行是从 NSObjCRuntime.h 复制的)

    【讨论】:

      【解决方案3】:

      您需要将框架添加到您的 Xcode 项目中。

      Frameworks / Linked Frameworks, Add -&gt; Existing Frameworks

      更多详细信息,谷歌add framework to xcode

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-08-22
        • 2012-03-25
        • 2019-06-27
        • 1970-01-01
        • 2018-10-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多