【发布时间】:2012-09-23 22:47:47
【问题描述】:
它们的含义是什么,我可以将它们设置为不同的值吗?
【问题讨论】:
它们的含义是什么,我可以将它们设置为不同的值吗?
【问题讨论】:
架构是您想要构建的架构,有效架构是您可以使用代码库构建的架构。
因此,也许您只想为 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,因为您只想为您将要测试/运行它的机器构建调试版本,并为您计划支持的所有体系结构发布构建。
【讨论】:
从 Apple 文档中,我们知道 Xcode 将构建的二进制列表是 Valid Architectures 与 Architectures 相交的列表。
所以,正如他所说,我不认为杰里米的回答是正确的:
所以也许您只想为 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 armv7s和ARCHS = armv6。这样二进制Xcode构建的结果是armv6,在armv6/上都可以正常运行armv7/armv7s 作为 arm 处理器向后兼容。
【讨论】: