[英]What's the difference between "Architectures" and "Valid Architectures" in Xcode Build Settings?
它們的含義是什么,我可以將它們設置為不同的值嗎?
架構是您想要構建的架構,有效的架構是您可以設想使用您的代碼庫構建的架構。
所以也許你只想為armv7s構建你的二進制文件,但是相同的源代碼可以很好地編譯armv7和armv6。 所以VALID_ARCHS = armv6 armv7 armv7s
,但你設置了ARCHS = armv7s
因為這是你真正想要用你的代碼構建的。
或者,在Apple-ese中:
ARCHS(架構)
以空格分隔的標識符列表。 指定二進制文件所針對的體系結構(ABI,處理器模型)。 當此構建設置指定多個體系結構時,生成的二進制文件可能包含每個指定體系結構的對象代碼。
和:
VALID_ARCHS(有效架構)
以空格分隔的標識符列表。 指定可以為其構建二進制文件的體系結構。 在構建期間,此列表與ARCHS構建設置的值相交; 結果列表指定二進制文件可以運行的體系結構。 如果生成的體系結構列表為空,則目標不生成二進制文件。
來源: Xcode構建設置參考
實際上,您VALID_ARCHS
保留VALID_ARCHS
並且不必擔心更改它,只需擺弄ARCHS
即可設置您想要構建的體系結構。 通常,您將Debug構建設置為NATIVE_ARCH
,因為您只想為要測試/運行它的機器構建調試版本,並為您計划支持的所有體系結構構建Release版本。
從蘋果公司的文件,我們知道二進制的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處理器向后兼容。
VALID_ARCHS
可以支持這樣的工作流程:
xcodebuild ARCHS=...
來說明你想要包含在你的二進制文件中的架構(它們可以是通用的)。 Xcode 將取兩者的交集並為它們構建目標。 想象一個目標只支持arm64
,而你的大多數目標都支持x86_64
和arm64
。 你打電話給xcodebuild ARCHS="x86_64 arm64"
。 這是發生了什么:
VALID_ARCHS=arm64
ARCHS
設置為: arm64
x86_64
arm64
但是,如果您使用ARCHS
,就會發生這種情況
ARCHS=arm64
ARCHS
arm64 x64
arm64
和x86_64
構建。 <- 不是你想要的。https://developer.apple.com/documentation/xcode-release-notes/xcode-12-release-notes
VALID_ARCHS
已棄用。 相反,應該在目標上使用EXCLUDED_ARCHS
來排除某些架構。
所以現在要執行相同的工作流程,您可以在上述目標上設置DISABLED_ARCHS=x86_64
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.