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 armv7s
和ARCHS = armv6
。这样,二进制Xcode的结果将会是armv6,它可以在armv6 / armv7 / armv7s作为arm处理器向后兼容。