Réponses:
Les architectures sont celles que vous souhaitez construire, les architectures valides sont celles que vous pourriez concevoir de construire avec votre base de code.
Alors peut-être que vous ne voulez construire votre binaire que pour armv7s, mais le même code source compilerait bien pour armv7 et armv6. Donc VALID_ARCHS = armv6 armv7 armv7s
, mais vous définissez ARCHS = armv7s
parce que c'est tout ce que vous voulez réellement construire avec votre code.
Ou, en Apple-ese:
ARCHES (Architectures)
Liste d'identificateurs séparés par des espaces. Spécifie les architectures (ABI, modèles de processeur) vers lesquelles le binaire est ciblé. Lorsque ce paramètre de construction spécifie plus d'une architecture, le binaire généré peut contenir du code objet pour chacune des architectures spécifiées.
et:
VALID_ARCHS (architectures valides)
Liste d'identificateurs séparés par des espaces. Spécifie les architectures pour lesquelles le binaire peut être construit. Pendant la construction, cette liste est intersectée avec la valeur du paramètre de construction ARCHS; la liste résultante spécifie les architectures sur lesquelles le binaire peut fonctionner. Si la liste d'architecture résultante est vide, la cible ne génère aucun binaire.
Source: Référence des paramètres de construction Xcode
En pratique, vous partez VALID_ARCHS
seul et ne vous souciez pas de le changer, et vous vous contentez de jouer avec ARCHS
pour définir les architectures que vous souhaitez construire. En règle générale, vous définissez une version de débogage sur juste NATIVE_ARCH
, puisque vous souhaitez uniquement créer la version de débogage pour la machine sur laquelle vous allez la tester / l'exécuter, et publier des versions pour l'ensemble des architectures que vous prévoyez de prendre en charge.
D'après le document Apple, nous savons que le binaire Xcode va construire est la liste Valid Architectures
intersectée avec Architectures
.
Donc, je ne pense pas que la réponse de Jeremy soit juste, comme il le dit:
Alors peut-être que vous ne voulez construire votre binaire que pour armv7s, mais le même code source
compilerait bien pour armv7 et armv6. DoncVALID_ARCHS = armv6 armv7 armv7s
, mais vous définissez ARCHS = armv7s parce que c'est tout ce que vous voulez réellement construire avec votre code.
Lorsque vous définissez VALID_ARCHS = armv6 armv7 armv7s
et définissez ARCHS = armv7s
, le résultat de la construction binaire de Xcode est armv7s , il n'est pas compatible avec armv6 / armv7.
Et si vous voulez être compatible avec armv6 / armv7 / armv7s, vous devez définir VALID_ARCHS = armv6 armv7 armv7s
et ARCHS = armv6
.De cette façon, le résultat de Xcode binaire sera construit est armv6, et il peut fonctionner correctement sur les deux armv6 / armv7 / armv7s car le processeur arm est rétrocompatible .