119

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

4

2 回答 2

117

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

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

或者,在苹果语中:

拱门(建筑)

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

和:

VALID_ARCHS(有效架构)

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

来源:Xcode 构建设置参考

在实践中,你VALID_ARCHS不用担心改变它,只需摆弄ARCHS设置你想要构建的架构。通常,您将 Debug 构建设置为 just NATIVE_ARCH,因为您只想为您将要测试/运行它的机器构建调试版本,并为您计划支持的所有架构构建发布构建。

于 2012-10-03T02:39:58.053 回答
4

从 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 armv7sARCHS = armv6。这样,二进制Xcode构建的结果是armv6,并且它可以在armv6/armv7/armv7s上正常运行,因为arm处理器向后兼容.

于 2014-05-09T04:24:33.473 回答