Xcode构建设置中的“架构”和“有效架构”之间有什么区别?

时间:2012-10-03 02:35:57

标签: ios xcode xcode4.5

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

2 个答案:

答案 0 :(得分:106)

您希望构建体系结构,有效的体系结构是您可以设想使用代码库构建的体系结构。

所以也许你只想为armv7s构建二进制文件,但是相同的源代码可以很好地编译armv7和armv6。所以VALID_ARCHS = armv6 armv7 armv7s,但是您设置了ARCHS = armv7s,因为您实际上只需来构建代码。

或者,在Apple-ese中:

  

ARCHS(架构)

     

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

  

VALID_ARCHS(有效架构)

     

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

来源:Xcode Build Setting Reference

在实践中,您单独留下VALID_ARCHS并且不用担心更改它,只需摆弄ARCHS即可设置您要构建的体系结构。通常,您将Debug构建设置为NATIVE_ARCH,因为您只想为要测试/运行它的机器构建调试版本,并为您计划支持的所有体系结构构建Release版本

答案 1 :(得分: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处理器向后兼容。