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


112

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

Answers:


113

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

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

或者,用苹果语:

ARCHS(建筑)

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

和:

VALID_ARCHS(有效架构)

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

来源:Xcode构建设置参考

在实践中,您不用VALID_ARCHS管它,不用担心更改它,而只需摆弄ARCHS设置要构建的体系结构。通常,您将Debug构建设置为just NATIVE_ARCH,因为您只想为将要在其上测试/运行的机器构建调试版本,而Release则构建为计划支持的所有体系结构。


1
@DanMoore在构建时,“结果架构列表”已在内存中完成。
Saltymule 2014年

3
@ onmyway133大多数时候,您不需要VALID_ARCHS。如果仅针对某些体系结构编写内联汇编,则可以更改VALID_ARCHS以反映您的代码不再适用于那些体系结构。不过,大多数情况下,这只是Xcode的提示,表明它可以构建哪种架构,然后从那里选择ARCHS。
杰里米·W·谢尔曼

4

从Apple文档中,我们知道将要构建的二进制Xcode是与Valid Architectures 相交的列表Architectures

因此,我认为杰里米的答案不正确,因为他说:

因此,也许您只想为armv7构建二进制文件,但是相同的源代码
对于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,并且由于arm处理器向后兼容,因此可以在armv6 / armv7 / armv7s上正常运行。


1
他是对的:“因为这就是您实际上要用代码构建的全部。”
Laszlo 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.