Quelle est leur signification et puis-je les définir dans des valeurs différentes?
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 avecArchitectures
.Donc, je ne pense pas que la réponse de Jeremy soit juste, comme il le dit:
Lorsque vous définissez
VALID_ARCHS = armv6 armv7 armv7s
et définissezARCHS = 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
etARCHS = 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 .la source