它们的含义是什么? 我可以将它们设置为不同的值吗?
架构是您想要构建的,有效的架构是您可以设想用代码库构建的架构。
因此,也许您只想为 armv7构建二进制文件,但是相同的源代码可以很好地为 armv7和 armv6编译。所以 VALID_ARCHS = armv6 armv7 armv7s,但是您设置了 ARCHS = armv7s,因为实际上 want只需要用代码构建 ARCHS = armv7s。
VALID_ARCHS = armv6 armv7 armv7s
ARCHS = armv7s
或者,用苹果的话说:
ARCHS (Architectures) 以空格分隔的标识符列表。指定二进制文件所针对的体系结构(ABI、处理器模型)。当此生成设置指定多个体系结构时,生成的二进制文件可能包含每个指定体系结构的目标代码。
ARCHS (Architectures)
以空格分隔的标识符列表。指定二进制文件所针对的体系结构(ABI、处理器模型)。当此生成设置指定多个体系结构时,生成的二进制文件可能包含每个指定体系结构的目标代码。
以及:
VALID _ ARCHS (有效体系结构) 以空格分隔的标识符列表。指定可为其生成二进制文件的体系结构。在生成期间,此列表与 ARCHS 生成设置的值相交; 生成的列表指定二进制文件可以在其上运行的体系结构。如果结果体系结构列表为空,则目标不生成二进制文件。
VALID _ ARCHS (有效体系结构)
以空格分隔的标识符列表。指定可为其生成二进制文件的体系结构。在生成期间,此列表与 ARCHS 生成设置的值相交; 生成的列表指定二进制文件可以在其上运行的体系结构。如果结果体系结构列表为空,则目标不生成二进制文件。
资料来源: Xcode 构建设置参考
实际上,您不需要修改 VALID_ARCHS,只需要修改 ARCHS来设置您想要构建的体系结构。通常,您将 Debug build 设置为仅 NATIVE_ARCH,因为您只想为将要测试/运行它的计算机构建调试版本,并且针对您计划支持的所有架构构建发布版本。
VALID_ARCHS
ARCHS
NATIVE_ARCH
从 Apple 文档中,我们知道二进制 Xcode 将构建与 Architectures相交的列表 Valid Architectures。
Architectures
Valid Architectures
所以,我不认为 Jeremy 的回答是正确的,就像他说的:
因此,也许您只想为 armv7构建二进制代码,但是相同的源代码也可以 为 armv7和 armv6编译。所以 VALID_ARCHS = armv6 armv7 armv7s,但是你设置 ARCHS = armv7s,因为这就是您实际想要用代码构建的全部内容。
当设置 VALID_ARCHS = armv6 armv7 armv7s和 ARCHS = armv7s时,二进制 Xcode 的结果是 armv7,它不能与 armv6/armv7兼容。
如果你想兼容 armv6/armv7/armv7s,你必须设置 VALID_ARCHS = armv6 armv7 armv7s和 ARCHS = armv6。这样,二进制 Xcode 的结果就是 armv6,它可以在 armv6/armv7/armv7s 上运行良好,因为 arm 处理器是向后兼容的。
ARCHS = armv6
VALID_ARCHS可以支持这样的工作流程:
xcodebuild ARCHS=...
Xcode will take intersection of the two and build the targets for them. Imagine a target only supports arm64, while most of your targets support x86_64 and arm64. You call xcodebuild ARCHS="x86_64 arm64". This is what happens:
arm64
x86_64
xcodebuild ARCHS="x86_64 arm64"
VALID_ARCHS=arm64
但是,如果使用 ARCHS,会发生这种情况吗
ARCHS=arm64
arm64 x64
Https://developer.apple.com/documentation/xcode-release-notes/xcode-12-release-notes
不推荐使用 VALID_ARCHS。相反,应该在目标上使用 EXCLUDED_ARCHS来排除某些体系结构。
EXCLUDED_ARCHS
因此,现在要执行相同的工作流程,需要在上述目标上设置 DISABLED_ARCHS=x86_64。
DISABLED_ARCHS=x86_64