Qual è la differenza tra "Architectures" e "Valid Architectures" in Xcode Build Settings?


Risposte:


113

Le architetture sono quelle che vuoi costruire, le architetture valide sono quelle che potresti concepire di costruire con la tua base di codice.

Quindi forse vuoi solo costruire il tuo binario per armv7s, ma lo stesso codice sorgente si compilerebbe bene per armv7 e armv6. Quindi VALID_ARCHS = armv6 armv7 armv7s, ma imposti ARCHS = armv7sperché è tutto ciò che vuoi effettivamente costruire con il tuo codice.

Oppure, in Apple-ese:

ARCHI (Architetture)

Elenco di identificatori separati da spazi. Specifica le architetture (ABI, modelli di processore) a cui è destinato il binario. Quando questa impostazione di compilazione specifica più di un'architettura, il binario generato può contenere codice oggetto per ciascuna delle architetture specificate.

e:

VALID_ARCHS (architetture valide)

Elenco di identificatori separati da spazi. Specifica le architetture per le quali è possibile creare il file binario. Durante la compilazione, questo elenco viene intersecato con il valore dell'impostazione di compilazione ARCHS; l'elenco risultante specifica le architetture su cui può essere eseguito il binario. Se l'elenco dell'architettura risultante è vuoto, la destinazione non genera alcun file binario.

Fonte: riferimento alle impostazioni di compilazione Xcode

In pratica, te ne vai VALID_ARCHSda solo e non ti preoccupare di cambiarlo, e basta armeggiare ARCHSper impostare le architetture che vuoi costruire. In genere, si imposta una build di debug su just NATIVE_ARCH, dal momento che si desidera compilare solo la versione di debug per la macchina su cui verrà testata / eseguita e build di rilascio per l'intero spettro di architetture che si prevede di supportare.


1
@DanMoore L '"elenco dell'architettura risultante" viene eseguito in memoria al momento della compilazione.
Saltymule

3
@ onmyway133 La maggior parte delle volte non vuoi VALID_ARCHS. Se stavi scrivendo asm inline solo per alcune architetture, potresti modificare VALID_ARCHS per riflettere che il tuo codice non è più inteso per nessuna ma quelle architetture. Per lo più, però, è solo uno spunto per te da Xcode che indica per quali architetture può costruire, e scegli da lì per i tuoi ARCHS.
Jeremy W. Sherman

4

Dal documento Apple, sappiamo che il codice binario che verrà creato da Xcode è l'elenco Valid Architectures intersecato Architectures.

Quindi, non penso che la risposta di Jeremy sia giusta, come dice:

Quindi forse vuoi solo costruire il tuo binario per armv7s, ma lo stesso codice sorgente si
compilerebbe bene per armv7 e armv6. Quindi VALID_ARCHS = armv6 armv7 armv7s, ma imposti ARCHS = armv7s perché è tutto ciò che vuoi effettivamente costruire con il tuo codice.

Quando si imposta VALID_ARCHS = armv6 armv7 armv7se si imposta ARCHS = armv7s, il risultato della creazione di Xcode binario è armv7s , non potrebbe essere compatibile con armv6 / armv7.

E se vuoi essere compatibile con armv6 / armv7 / armv7s , devi impostare VALID_ARCHS = armv6 armv7 armv7se ARCHS = armv6. In questo modo, il risultato di Xcode binario sarà armv6, e può funzionare bene su entrambi armv6 / armv7 / armv7s poiché il processore arm è retrocompatibile .


1
Aveva ragione: "perché è tutto quello che vuoi costruire con il tuo codice".
Laszlo
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.