【问题标题】:What's the difference between "Architectures" and "Valid Architectures" in Xcode Build Settings?Xcode Build Settings 中的“Architectures”和“Valid Architectures”有什么区别?
【发布时间】:2012-09-23 22:47:47
【问题描述】:

它们的含义是什么,我可以将它们设置为不同的值吗?

【问题讨论】:

    标签: ios xcode xcode4.5


    【解决方案1】:

    架构是您想要构建的架构,有效架构是您可以使用代码库构建的架构。

    因此,也许您只想为 armv7s 构建二进制文件,但是对于 armv7 和 armv6,相同的源代码可以编译得很好。所以VALID_ARCHS = armv6 armv7 armv7s,但您设置了ARCHS = armv7s,因为这就是您真正想要用您的代码构建的全部内容。

    或者,在苹果语中:

    ARCHS(架构)

    以空格分隔的标识符列表。指定二进制文件所针对的体系结构(ABI、处理器模型)。当此构建设置指定多个架构时,生成的二进制文件可能包含每个指定架构的目标代码。

    和:

    VALID_ARCHS(有效架构)

    以空格分隔的标识符列表。指定可以为其构建二进制文件的体系结构。在构建期间,此列表与 ARCHS 构建设置的值相交;结果列表指定了二进制文件可以运行的架构。如果生成的架构列表为空,则目标不会生成二进制文件。

    来源:Xcode Build Setting Reference

    在实践中,您可以不理会VALID_ARCHS 而不必担心更改它,而只需摆弄ARCHS 来设置您想要构建的架构。通常,您将 Debug 构建设置为 NATIVE_ARCH,因为您只想为您将要测试/运行它的机器构建调试版本,并为您计划支持的所有体系结构发布构建。

    【讨论】:

    • @DanMoore “生成的架构列表”在构建时在内存中完成。
    • @onmyway133 大多数时候,您不需要 VALID_ARCHS。如果您只为某些架构编写内联汇编,您可能会更改 VALID_ARCHS 以反映您的代码不再适用于那些架构之外的任何架构。不过,大多数情况下,它只是 Xcode 给您的提示,指示它可以为哪些架构构建,然后您可以从那里为您的 ARCHS 选择。
    【解决方案2】:

    从 Apple 文档中,我们知道 Xcode 将构建的二进制列表是 Valid ArchitecturesArchitectures 相交的列表。

    所以,正如他所说,我不认为杰里米的回答是正确的:

    所以也许您只想为 armv7s 构建二进制文件,但相同的源代码会
    为 armv7 和 armv6 编译良好。所以VALID_ARCHS = armv6 armv7 armv7s,但是你设置 ARCHS = armv7s,因为这就是您真正想要使用代码构建的全部内容。

    当你设置VALID_ARCHS = armv6 armv7 armv7s,设置ARCHS = armv7s时,二进制Xcode构建的结果是armv7s,它不能兼容armv6/armv7。

    如果你想兼容armv6/armv7/armv7s,你必须设置VALID_ARCHS = armv6 armv7 armv7sARCHS = armv6。这样二进制Xcode构建的结果是armv6,在armv6/上都可以正常运行armv7/armv7s 作为 arm 处理器向后兼容。

    【讨论】:

    • 他是对的:“因为这就是你真正想用你的代码构建的全部内容。”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-01
    • 2013-11-27
    • 2021-08-26
    • 2018-10-18
    • 2022-07-04
    相关资源
    最近更新 更多