“Architectures”和“Valid Architectures”在Xcode构建设置中有什么区别?

9 浏览
0 Comments

“Architectures”和“Valid Architectures”在Xcode构建设置中有什么区别?

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

0
0 Comments

在Xcode的构建设置中,“Architectures”和“Valid Architectures”之间有什么区别?

在Xcode 12之前的版本中,“VALID_ARCHS”可以支持以下工作流程:

- 您在一个目标上设置“VALID_ARCHS”。

- 调用xcodebuild时,您使用“xcodebuild ARCHS=…”来指定要构建的架构,以确定要在您的二进制文件中包含的架构(它们可以是通用的)。

Xcode将对这两者进行交集运算,并为它们构建目标。假设一个目标仅支持“arm64”,而您的大多数目标都支持“x86_64”和“arm64”。您调用“xcodebuild ARCHS="x86_64 arm64"”。以下是发生的情况:

- 您在目标上设置:“VALID_ARCHS=arm64”。

- xcodebuild将“ARCHS”设置为:“arm64 x86_64”。

- 目标将为交集“arm64”进行构建。

然而,如果您使用“ARCHS”,情况如下:

- 您在目标上设置:“ARCHS=arm64”。

- xcodebuild将“ARCHS”覆盖为:“arm64 x64”。

- 目标将为“arm64”和“x86_64”进行构建!<- 这不是您想要的。

而在Xcode 12及以后的版本中,“VALID_ARCHS”被弃用。相反,应该在目标上使用“EXCLUDED_ARCHS”来排除一些架构。现在,要完成相同的工作流程,您在上述目标上设置“DISABLED_ARCHS=x86_64”。

0
0 Comments

在Xcode Build Settings中,“Architectures”和“Valid Architectures”之间有什么区别?

根据苹果文档,我们知道Xcode将构建的二进制文件是由“Valid Architectures”和“Architectures”两者的交集决定的。

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

“也许你只想为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 armv7sARCHS = armv6。这样,Xcode构建的二进制结果是armv6,它可以在armv6/armv7/armv7s上正常运行,因为ARM处理器是向后兼容的。

他是对的:“因为这是你实际上想要使用你的代码构建的。”

0
0 Comments

在Xcode Build Settings中,"Architectures"和"Valid Architectures"之间的区别是,"Architectures"表示你想要构建的架构,而"Valid Architectures"表示你可以使用你的代码库构建的架构。

解决方法是,通常情况下,你可以不用担心改变"Valid Architectures",只需要调整"Architectures"来设置你想要构建的架构。通常,你可以将Debug版本设置为只针对构建,因为你只想在测试/运行它的机器上构建调试版本,而将Release版本设置为支持你计划支持的所有架构。

大多数情况下,你不需要关注"Valid Architectures"。如果你正在为特定的架构编写内联汇编代码,你可能会更改"Valid Architectures"以反映你的代码不再适用于除了这些架构之外的任何架构。然而,它主要只是Xcode给你的提示,表示它可以构建的架构,并且你可以从中选择适合你的"Architectures"。

"resulting architecture list"是在构建时在内存中完成的。

总结起来,你只需要关注调整"Architectures"来设置你想要构建的架构,而不用担心"Valid Architectures"。

0