簡體   English   中英

Xcode Build Settings 中的“Architectures”和“Valid Architectures”有什么區別?

[英]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 armv7sARCHS = armv6 。這樣,二進制Xcode的結果將是armv6,並且它可以在armv6 / armv7上正常運行/ armv7s作為arm處理器向后兼容。

前 xcode 12 時代

VALID_ARCHS可以支持這樣的工作流程:

  • 您在目標上設置 VALID_ARCHS。
  • 當調用 xcodebuild 時,你傳遞你想要構建的架構xcodebuild ARCHS=...來說明你想要包含在你的二進制文件中的架構(它們可以是通用的)。

Xcode 將取兩者的交集並為它們構建目標。 想象一個目標只支持arm64 ,而你的大多數目標都支持x86_64arm64 你打電話給xcodebuild ARCHS="x86_64 arm64" 這是發生了什么:

  • 您在目標上設置: VALID_ARCHS=arm64
  • xcodebuild 將ARCHS設置為: arm64 x86_64
  • Target 將為路口arm64

但是,如果您使用ARCHS ,就會發生這種情況

  • 您在目標上設置: ARCHS=arm64
  • xcodebuild 將 ARCHS 覆蓋為ARCHS arm64 x64
  • 目標將為arm64x86_64構建。 <- 不是你想要的。

xcode 12時代及以后

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM