2012-10-03 69 views

回答

98

體系結構是你想要建立的體系結構,有效的體系結構是你可以設想用你的代碼庫構建的體系結構。所以也許你只想爲armv7s構建你的二進制文件,但是相同的源代碼可以很好的編譯armv7和armv6。所以VALID_ARCHS = armv6 armv7 armv7s,但你設置ARCHS = armv7s,因爲這是你真的想要與您的代碼構建。

或者說,在蘋果公司ESE:

ARCHS(架構)的標識符

空格分隔的列表。指定二進制文件所針對的體系結構(ABI,處理器模型)。當此構建設置指定多個體繫結構時,生成的二進制文件可能包含每個指定體系結構的目標代碼。

和:

VALID_ARCHS(有效架構)標識符

空間分隔的列表。指定可以構建二進制文件的體系結構。在構建過程中,此列表與ARCHS構建設置的值相交;結果列表指定了二進制文件可以運行的體系結構。如果生成的體系結構列表爲空,則目標不會生成二進制文件。

來源:Xcode Build Setting Reference

在實踐中,你離開VALID_ARCHS獨自不用擔心改變它,只是撥弄ARCHS設置要構建的架構。通常情況下,您將Debug版本設置爲NATIVE_ARCH,因爲您只想爲要測試/運行的計算機構建調試版本,而Release版本則針對您計劃支持的全部架構進行構建。

+0

有沒有人知道這個「產生的架構列表」可以找到????????? – DanMoore

+1

@DanMoore「生成的架構列表」在構建時在內存中完成。 – Saltymule

+2

@ JeremyW.Sherman看來VALID_ARCHS是沒用的? – onmyway133

4

從Apple文檔中,我們知道二進制Xcode將生成的列表是Valid ArchitecturesArchitectures相交。

所以,我不認爲傑里米的答案是正確的,他說:

因此,也許你只是想建立您的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處理器是向後兼容的。

+1

他是對的:「因爲這就是你想用你的代碼構建**的全部**。」 – Laszlo