Ответы:
Архитектуры - это те, которые вы хотите построить, действительные архитектуры - это те, которые вы могли бы задумать построить с помощью своей кодовой базы.
Так что, возможно, вы хотите создать свой двоичный файл только для armv7s, но тот же исходный код будет хорошо компилироваться для armv7 и armv6. Итак VALID_ARCHS = armv6 armv7 armv7s
, но вы устанавливаете, ARCHS = armv7s
потому что это все, что вы действительно хотите построить с помощью своего кода.
Или в Apple-ese:
ARCHS (Архитектуры)
Список идентификаторов, разделенных пробелами. Задает архитектуры (ABI, модели процессоров), на которые нацелен двоичный файл. Если этот параметр сборки указывает более одной архитектуры, сгенерированный двоичный файл может содержать объектный код для каждой из указанных архитектур.
и:
VALID_ARCHS (допустимые архитектуры)
Список идентификаторов, разделенных пробелами. Задает архитектуры, для которых может быть построен двоичный файл. Во время сборки этот список пересекается со значением параметра сборки ARCHS; в итоговом списке указаны архитектуры, на которых может работать двоичный файл. Если результирующий список архитектуры пуст, цель не генерирует двоичный файл.
Источник: Справочник по настройке сборки Xcode
На практике вы оставляете в VALID_ARCHS
покое и не беспокоитесь о его изменении, а просто возитесь с ARCHS
настройкой архитектуры, которую хотите построить. Как правило, вы устанавливаете отладочную сборку только NATIVE_ARCH
, так как вы хотите создать отладочную версию только для машины, на которой вы будете тестировать / запускать ее, и выпускаете сборки для всего спектра архитектур, которые вы планируете поддерживать.
Из документа Apple мы знаем, что двоичный 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 имеет обратную совместимость .