它们的含义是什么,我可以将它们设置为不同的值吗?
2 回答
架构是您想要构建的架构,有效架构是您可以使用代码库构建的架构。
因此,也许您只想为 armv7s 构建二进制文件,但是对于 armv7 和 armv6,相同的源代码可以编译得很好。所以VALID_ARCHS = armv6 armv7 armv7s
,但是你设置ARCHS = armv7s
是因为这就是你真正想要用你的代码构建的。
或者,在苹果语中:
拱门(建筑)
以空格分隔的标识符列表。指定二进制文件所针对的体系结构(ABI、处理器模型)。当此构建设置指定多个架构时,生成的二进制文件可能包含每个指定架构的目标代码。
和:
VALID_ARCHS(有效架构)
以空格分隔的标识符列表。指定可以为其构建二进制文件的体系结构。在构建期间,此列表与 ARCHS 构建设置的值相交;结果列表指定了二进制文件可以运行的架构。如果生成的架构列表为空,则目标不会生成二进制文件。
来源:Xcode 构建设置参考
在实践中,你VALID_ARCHS
不用担心改变它,只需摆弄ARCHS
设置你想要构建的架构。通常,您将 Debug 构建设置为 just 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处理器向后兼容.