【问题标题】:Nested Aggregate Targets in Xcode don't seem to pass settings properlyXcode 中的嵌套聚合目标似乎无法正确传递设置
【发布时间】:2011-05-28 08:24:45
【问题描述】:

我有一个项目,其中包含一个主要的 Cocoa 应用程序、一堆插件和几个帮助应用程序。辅助应用程序有自己的目标,因为我希望应用程序可以在没有插件的情况下构建,所以主应用程序有它自己的目标(称为 AppTarget),但我通常将它全部构建在聚合目标中(称为 TargetA)。我还有另一个带有 TargetA 的聚合目标、另一个插件和一个附加的复制文件构建阶段 (TargetB)。这一切都按预期工作。我正在尝试创建一个新的聚合目标 TargetC,它包含 TargetA,并且将具有(但还没有)运行 Shell 脚本构建阶段。

我遇到的问题是我正在尝试使用 GCC_PREPROCESSOR_DEFINITIONS 来#define 一个符号 TARGETC,用于条件编译(#ifdef TARGETC ... #endif),但它没有包含在构建参数中当我查看构建日志并且应用程序的行为与构建日志匹配时 - GCC_PREPROCESSOR_DEFINITIONS 失败(我尝试了 TARGETC 和 TARGETC=1。我尝试添加 OTHER_CFLAGS 用户定义设置(将其设置为 -DTARGETC=1 ),但这也没有用。

文档说聚合目标上的用户定义的设置会渗透到它们的子目标,但似乎这只下降了一层 - TargetA 可能会得到它,但 AppTarget 肯定没有。这是错误、预期行为还是我做错了什么?

【问题讨论】:

  • 我应该提一下,这是 Snow Leopard 10.6.7 上的 Xcode 3.2.6。

标签: xcode preprocessor nested targets


【解决方案1】:

我找到了答案:这是预期行为,此外,聚合目标根本不会将其用户设置传递给子目标;要么文档有误,要么我误读了它。这似乎违背了将 GCC_PREPROCESSOR_DEFINITIONS 作为可用于聚合目标的默认用户设置的目的,但是 c'est la vie。

为了获得我想要的行为,我构建了一个单独的插件,该插件将添加到新的聚合目标中。我正在使用单例加载插件,它将保存对插件中主体类的引用(键入为id <MyPluginProtocol>),可以将其返回给任何询问的人。如果加载尝试失败(因为插件不存在),它将返回 nil,因此if (nil != [[PluginLoader sharedLoader] plugin]) 代替了#ifdef TARGETC。这意味着我不会减少交付代码的大小,但至少它可以工作,而且这不是浪费,因为无论如何我还有其他代码将进入插件(仅针对此目标)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-16
    • 2021-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多