它们的含义是什么,我可以用不同的值设置它们吗?
答案 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 armv7s
和ARCHS = armv6
。这样,二进制Xcode的结果将是armv6,它可以正常运行在armv6 / armv7 / armv7s上,arm处理器向后兼容。