【问题标题】:Xcode 4: Project does not honor $(inherited) Build Setting in Workspace?Xcode 4:项目不尊重工作区中的 $(inherited) 构建设置?
【发布时间】:2012-10-30 22:25:02
【问题描述】:

今天是我为 Xcode 4、工作区和项目而受苦的一天。

我有一个workspace 和一些开源库(openssl、sqlcipher 和其他几个)。在工作区中有一个“主要”project,它生成一个 EXE 作为目标。开源项目是“主”项目的“子项目”或“子项目”。如下所示:

Main Project
  +- OpenSSL Project
  +- SqlCipher Project
  ...

在“主”项目中,在“项目”(而不是“目标”)下,我设置了预处理器和警告标志build settings。例如,调试预处理器宏是“DEBUG=1 SQLITE_DEBUG=1 SQLITE_HAS_CODEC=1”(不带引号)。相反,发布预处理器宏设置为“NDEBUG=1 NS_BLOCK_ASSERTIONS=1 SQLITE_HAS_CODEC=1”。

在主“目标”(不是“项目”)和所有子项目(“项目”和“目标”)中,我确保没有特定于项目的构建设置覆盖(通过突出显示“预处理器宏”并按 COMMAND +删除)。然后我确保该字段设置为“$(inherited)”(不带引号)。

瞧,子项目不尊重“$(inherited)”。当我查看 Xcode 发出的命令行时,GCC_PREPROCESSOR_DEFINITIONS 中没有任何内容。例如,SqlCipher 的项目文件未使用从 Main 继承的构建设置进行编译。

我认为问题可能与Preprocessor Macros ignored in XCode's project settings, but not target settings 相似,但我似乎无法获得相同的 [肯定] 结果。

谁能向我解释如何让子项目兑现“$(继承)”?当我尝试通读 Apple 的文档时,我只会对阅读的内容和观察到的行为感到更加困惑。请像在和孩子说话一样解释它。

【问题讨论】:

    标签: xcode xcode4 build-process dependency-management targets


    【解决方案1】:

    这些设置不会跨越项目边界。我建议您改用.xcconfig 文件配置您的目标(这些文件可能被多个项目引用)。


    更新/说明:使用您的示例设置:主项目的构建设置可能会影响主项目的任何目标,但它们不会跨越到 OpenSSL 项目的目标。

    【讨论】:

    • @noloader re $(inherited):假设您在项目级别定义了GCC_PREPROCESSOR_DEFINITIONS。如果您在目标级别有更多要指定的内容,并且您只定义它们而不使用$(inherited),那么项目级别的定义将被忽略。在您使用$(inherited) 的地方,将添加上一级的构建设置。否则,您将不得不手动从构建设置的所有层手动复制定义。
    • @noloader b) 因为项目级别设置应用于该项目的目标。项目级别的构建设置不会改变或扩展到引用项目的目标(例如子项目或依赖项)。项目构建设置与项目目标的关系。
    • 谢谢贾斯汀。我想我的困惑点。 “主要”是具有构建 EXE 目标的主要项目。有一个 Xcode 配置(在 xcshareddata 中有一个配置文件)。我相信所有 [child] 项目都在使用它(或应该使用它)。正如我所说,库比蒂诺的更多 [软件] 废话。应该解雇他们的整个 QA 部门,并引入一组新的 ID10T。
    • @noloader 我怀疑您指的是共享的 .xcscheme 文件(未定义构建设置),而不是构建配置设置文件 (.xcconfig)。
    猜你喜欢
    • 2012-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-14
    • 2012-12-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多