Apa perbedaan antara "Arsitektur" dan "Arsitektur yang Valid" di Pengaturan Xcode Build?

112

Apa artinya dan dapatkah saya mengaturnya dalam nilai yang berbeda?

pohon utara
sumber

Jawaban:

113

Arsitektur adalah yang ingin Anda bangun, arsitektur yang valid adalah yang dapat Anda bayangkan untuk dibangun dengan basis kode Anda.

Jadi mungkin Anda hanya ingin membangun biner untuk armv7, tetapi kode sumber yang sama akan dapat dikompilasi dengan baik untuk armv7 dan armv6. Jadi VALID_ARCHS = armv6 armv7 armv7s, tetapi Anda menetapkan ARCHS = armv7skarena hanya itu yang sebenarnya ingin Anda buat dengan kode Anda.

Atau, dalam bahasa Apple:

ARCHS (Arsitektur)

Daftar pengenal yang dipisahkan spasi. Menentukan arsitektur (ABI, model prosesor) yang menjadi target biner. Jika setelan build ini menentukan lebih dari satu arsitektur, biner yang dihasilkan mungkin berisi kode objek untuk setiap arsitektur yang ditentukan.

dan:

VALID_ARCHS (Arsitektur yang Valid)

Daftar pengenal yang dipisahkan spasi. Menentukan arsitektur tempat biner dapat dibangun. Selama pembuatan, daftar ini berpotongan dengan nilai pengaturan build ARCHS; daftar yang dihasilkan menentukan arsitektur tempat biner dapat berjalan. Jika daftar arsitektur yang dihasilkan kosong, target tidak menghasilkan biner.

Sumber: Referensi Pengaturan Xcode Build

Dalam praktiknya, Anda pergi VALID_ARCHSsendiri dan tidak khawatir untuk mengubahnya, dan hanya mengutak-atik ARCHSuntuk mengatur arsitektur yang ingin Anda bangun. Biasanya, Anda menyetel build Debug ke hanya NATIVE_ARCH, karena Anda hanya ingin membangun versi debug untuk mesin yang akan Anda uji / jalankan, dan Rilis build untuk spektrum penuh arsitektur yang ingin Anda dukung.

Jeremy W. Sherman
sumber
1
@DanMoore "Daftar arsitektur yang dihasilkan" diselesaikan dalam memori pada waktu pembuatan.
Saltymule
3
@ onmyway133 Sering kali, Anda tidak menginginkan VALID_ARCHS. Jika Anda menulis asm inline hanya untuk arsitektur tertentu, Anda dapat mengubah VALID_ARCHS untuk menunjukkan bahwa kode Anda tidak lagi ditujukan untuk semua arsitektur, kecuali arsitektur tersebut. Namun, sebagian besar, itu hanya isyarat kepada Anda dari Xcode yang menunjukkan arsitektur mana yang dapat dibangunnya, dan Anda memilih dari sana untuk ARCHS Anda.
Jeremy W. Sherman
4

Dari dokumen Apple, kita tahu bahwa biner Xcode yang akan dibangun adalah daftar yang Valid Architectures berpotongan Architectures.

Jadi, saya rasa jawaban Jeremy tidak benar, seperti yang dia katakan:

Jadi mungkin Anda hanya ingin membangun biner untuk armv7, tetapi kode sumber yang sama akan dapat
dikompilasi dengan baik untuk armv7 dan armv6. Jadi VALID_ARCHS = armv6 armv7 armv7s, tetapi Anda menyetel ARCHS = armv7s karena hanya itu yang ingin Anda buat dengan kode Anda.

Saat Anda menyetel VALID_ARCHS = armv6 armv7 armv7s, dan menyetel ARCHS = armv7s, hasil dari biner Xcode yang akan dibangun adalah armv7s, tidak bisa kompatibel dengan armv6 / armv7.

Dan jika Anda ingin kompatibel dengan armv6 / armv7 / armv7s, Anda harus mengatur VALID_ARCHS = armv6 armv7 armv7sdan ARCHS = armv6. Dengan cara ini, hasil dari Xcode biner yang akan dibangun adalah armv6, dan dapat berjalan dengan baik di kedua armv6 / armv7 / armv7 karena prosesor lengan kompatibel ke belakang .

foogry.dll
sumber
1
Dia benar: "karena hanya itu yang ingin Anda buat dengan kode Anda."
Laszlo