web-dev-qa-db-ja.com

Xcode Build Settingsの「Architectures」と「Valid Architectures」の違いは何ですか?

それらの意味は何ですか?異なる値に設定できますか?

110
northtree

アーキテクチャは構築したいものであり、有効なアーキテクチャはコードベースで構築することを思い付くものです。

したがって、armv7sのバイナリのみをビルドしたい場合でも、同じソースコードでarmv7とarmv6をコンパイルできます。そう VALID_ARCHS = armv6 armv7 armv7s、しかしあなたはARCHS = armv7s実際にコードでビルドしたいのはだけだからです。

または、Apple-eseの場合:

ARCHS(アーキテクチャ)

識別子のスペース区切りリスト。バイナリが対象とするアーキテクチャ(ABI、プロセッサモデル)を指定します。このビルド設定が複数のアーキテクチャを指定する場合、生成されたバイナリには、指定された各アーキテクチャのオブジェクトコードが含まれる場合があります。

そして:

VALID_ARCHS(有効なアーキテクチャ)

識別子のスペース区切りリスト。バイナリを構築できるアーキテクチャを指定します。ビルド中、このリストはARCHSビルド設定の値と交差します。結果のリストは、バイナリを実行できるアーキテクチャを指定します。結果のアーキテクチャリストが空の場合、ターゲットはバイナリを生成しません。

ソース: Xcode Build Setting Reference

実際には、VALID_ARCHS単独で変更することを心配せずに、ARCHSをいじって構築するアーキテクチャを設定します。通常、デバッグビルドはNATIVE_Arch、テスト/実行するマシンのデバッグバージョンのみをビルドし、サポートする予定のすべてのアーキテクチャ向けにリリースをビルドするため。

107

Apple document、from、バイナリXcodeはValid ArchitecturesArchitecturesと交差するリストであることを知っています。

だから、ジェレミーの答えが正しいとは思わない、彼が言うように:

したがって、おそらくarmv7sのバイナリのみをビルドしたいのですが、同じソースコードは
armv7およびarmv6で正常にコンパイルします。 VALID_ARCHS = armv6 armv7 armv7sですが、ARCHS = armv7sに設定しているのは、コードで実際に構築したいのはそれだけだからです。

VALID_ARCHS = armv6 armv7 armv7sを設定し、ARCHS = armv7sを設定すると、バイナリXcodeのビルド結果はarmv7sになり、armv6/armv7と互換性がなくなります。

また、armv6/armv7/armv7sと互換性がある場合は、VALID_ARCHS = armv6 armv7 armv7sおよびARCHS = armv6を設定する必要があります。この方法で、バイナリXcodeのビルド結果はarmv6になり、両方のarmv6で正常に実行できます。/armv7/armv7sは、アームプロセッサに後方互換性があります。

4
foogry