web-dev-qa-db-fra.com

Quelle est la différence entre "Architectures" et "Architectures valides" dans les paramètres de construction Xcode?

Quelle est leur signification et puis-je les définir dans différentes valeurs?

110
northtree

Les architectures sont celles que vous voulez construire, les architectures valides sont celles que vous pourriez concevoir de construire avec votre base de code.

Alors peut-être que vous voulez seulement construire votre binaire pour armv7, mais le même code source compilerait bien pour armv7 et armv6. Alors 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, dans Apple-ese:

ARCHS (Architectures)

Liste d'identifiants séparés par des espaces. Spécifie les architectures (ABI, modèles de processeur) auxquelles le binaire est destiné. Lorsque ce paramètre de construction spécifie plusieurs architectures, le binaire généré peut contenir un code objet pour chacune des architectures spécifiées.

et:

VALID_ARCHS (Architectures valides)

Liste d'identifiants 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 être exécuté. Si la liste d'architecture résultante est vide, la cible ne génère aucun binaire.

Source: Référence du paramètre de construction Xcode

En pratique, vous quittez VALID_ARCHS seul et ne vous inquiétez pas de le changer, et tripotez simplement ARCHS pour définir les architectures que vous voulez construire. Généralement, vous définissez une construction Debug sur NATIVE_Arch, étant donné que vous voulez uniquement créer la version de débogage pour la machine sur laquelle vous allez tester/l'exécuter, Release crée pour le spectre complet des architectures que vous prévoyez de prendre en charge.

107

De Apple, nous savons que le Xcode binaire construit sera la liste Valid Architectures _ intersecté avec Architectures.

Donc, je ne pense pas que la réponse de Jeremy soit juste, comme il le dit:

Alors peut-être que vous voulez seulement construire votre binaire pour armv7s, mais le même code source serait
compile amende pour armv7 et armv6. Alors VALID_ARCHS = armv6 armv7 armv7s, mais vous définissez ARCHS = armv7s car c’est tout ce que vous voulez réellement construire avec votre code.

Lorsque vous définissez VALID_ARCHS = armv6 armv7 armv7s,Et mettre ARCHS = armv7s _, le résultat du binaire Xcode construira armv7s il ne pourrait pas être 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 manière, le résultat du binaire Xcode sera armv6, et il fonctionnera sans problème tant sur armv6/armv7/armv7 que le processeur arm est compatible avec les versions antérieures.

4
foogry