2012-10-03 66 views

回答

98

体系结构是你想要建立的体系结构,有效的体系结构是你可以设想用你的代码库构建的体系结构。所以也许你只想为armv7s构建你的二进制文件,但是相同的源代码可以很好的编译armv7和armv6。所以VALID_ARCHS = armv6 armv7 armv7s,但你设置ARCHS = armv7s,因为这是你真的想要与您的代码构建。

或者说,在苹果公司ESE:

ARCHS(架构)的标识符

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

和:

VALID_ARCHS(有效架构)标识符

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

来源:Xcode Build Setting Reference

在实践中,你离开VALID_ARCHS独自不用担心改变它,只是拨弄ARCHS设置要构建的架构。通常情况下,您将Debug版本设置为NATIVE_ARCH,因为您只想为要测试/运行的计算机构建调试版本,而Release版本则针对您计划支持的全部架构进行构建。

+0

有没有人知道这个“产生的架构列表”可以找到????????? – DanMoore

+1

@DanMoore“生成的架构列表”在构建时在内存中完成。 – Saltymule

+2

@ JeremyW.Sherman看来VALID_ARCHS是没用的? – onmyway133

4

从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处理器是向后兼容的。

+1

他是对的:“因为这就是你想用你的代码构建**的全部**。” – Laszlo