Xcode构build设置中的“体系结构”和“有效的体系结构”之间有什么区别?

他们的含义是什么,我可以设置他们不同的价值观?

架构是你想要build立的架构,有效的架构是你可以设想用你的代码库构build的架构。

所以也许你只想为armv7s构build你的二进制文件,但是相同的源代码可以很好地编译armv7和armv6。 所以VALID_ARCHS = armv6 armv7 armv7s ,但是你设置了ARCHS = armv7s因为这是你真正用你的代码构build的。

或者,在苹果公司:

ARCHS(架构)

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

和:

VALID_ARCHS(有效架构)

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

来源: Xcode的生成设置参考

在实践中,你VALID_ARCHS保留VALID_ARCHS ,不用担心改变它,只是摆弄ARCHS来设置你想build立的体系结构。 通常情况下,您将Debug构build设置为NATIVE_ARCH ,因为您只想为将要testing/运行的计算机构builddebugging版本,而Release则针对您计划支持的全部架构进行构build。

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

所以,我不认为杰里米的回答是正确的,他说:

所以,也许你只想build立你的armv7s二进制文件,但是相同的源代码会
编译好armv7和armv6。 所以VALID_ARCHS = armv6 armv7 armv7s ,但是你设置了ARCHS = armv7s,因为这是你真正想用你的代码构build的。

当你设置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处理器向后兼容。