iOS CPU架構(ARM指令集)
該選項起作用的條件有兩個,必須同時滿足才會起作用:
1. 其值設定為YES
2. Xcode成功連線除錯裝置
假定我們將Build Active Architecture Only值設定為YES,同時Xcode連線上手機 iPhone 5s(匹配指令集arm64)
1. 第一種情況
Architectures: armv7, armv7s, arm64
ValidArchitectures: armv6, armv7s, arm64
生成二進位制包支援的指令集: arm64
2. 第二種情況
Architectures: armv6, armv7, armv7s
Valid Architectures: armv6, armv7s, arm64
生成二進位制包支援的指令集: armv7s
3. 第三種情況
Architectures: armv6, armv7
Valid Architectures: armv6, armv7s, arm64
生成二進位制包支援的指令集: armv7
4. 第四種情況
Architectures: armv6
Valid Architectures: armv6, armv7s, arm64
生成二進位制包支援的指令集: 雖然編譯成功了,但是並沒有任何目標生成, 因為從XCode4.5開始,就不再支援armv6指令集,所以列表中寫了也是白寫。
5. 第五種情況
Architectures: armv7, armv7s, arm64
Valid Architectures: armv7,armv7s
生成二進位制包支援的指令集: 編譯出錯資訊
No architectures to compile for (ONLY_ACTIVE_ARCH=YES, active arch=arm64, VALID_ARCHS=armv7 armv7s)
可以看出:當Build Active Architecture Only起作用時:
連線的手機指令集匹配是由高到低(arm64 > armv7s > armv7)依次匹配的。
如連線手機為iPhone 5s,其預設指令集為arm64,若Architectures列表為armv7, armv7s,則會選取armv7s指令集為目標指令集,如果此時Valid Architectures列表中包含該指令集,則成功生成的二進位制包只支援armv7s指令集,若alid Architectures列表不包含此指令集,則編譯將會出錯:
No architectures to compile for (ONLY_ACTIVE_ARCH=YES, active arch=armv7s, VALID_ARCHS=armv7 arm64)
同樣的,若Architectures列表為armv7,則會選取armv7作為目標指令集,若Valid Architectures列表中包含了armv7指令集,則能夠成功生成二進位制包,其支援的指令集只有armv7,若Valid Architectures列表中不包含armv7,則編譯失敗。