6

XCode をサイド バイ サイドでインストールし、DEVELOPER_DIR環境変数を使用してそれらを選択したいと考えています。この目的は、 の結果を使用しxcrun -f --sdk macosx clangて適切な C コンパイラを決定し、それをスクリプトまたはビルド システムで使用することです。

CC=$(DEVELOPER_DIR=<something> xcrun -f --sdk macosx clang)

私の質問は、 で見つかったツールを使用DEVELOPER_DIRするときに設定したままにする必要があるかどうか、または上記のように の実行中に設定し、返されたツールをデフォルト環境で使用しても問題ないかどうかです。xcrunxcrunDEVELOPER_DIR

言い換えれば、xcrun明らかに の値に依存していますがDEVELOPER_DIR、ツール自体もそれに依存しているのでしょうか? 次の間に意味のある違いはありますか:

  • DEVELOPER_DIR=<whatever> command CC=$(xcrun -f --sdk macosx clang)
  • command CC=$(DEVELOPER_DIR=<whatever> xcrun -f --sdk macosx clang)

2つ目は正しいですか?それとも最初だけ?

4

1 に答える 1

2

XCode をサイド バイ サイドでインストールし、DEVELOPER_DIR 環境変数を使用してそれらを選択したいと考えています。

2 つ以上のバージョンの Xcode がインストールされていてもかまいません。それらの間で選択する通常の方法はコマンドを使用することですxcode-selectが、そのコマンドのマニュアルページには、DEVELOPER_DIR環境変数を自分で設定することにより、現在のセッションだけで同じことを達成できると書かれているようです. --switchオプションのドキュメントには次のように記載されています。

アクティブな開発者ディレクトリを指定されたパス (/Applications/Xcode-DP.app など) に設定します。このコマンドは、スーパーユーザー権限 (sudo(8) を参照) で実行する必要があり、システム上のすべてのユーザーに影響します。スーパーユーザー権限なしで、または現在のシェル セッションのみにパスを設定するには、代わりに DEVELOPER_DIR 環境変数を使用します (ENVIRONMENT を参照)。

ただし、環境セクションに記載されているアドバイスにも注意する必要があります。

歴史的な理由から、開発者ディレクトリは Xcode アプリケーション内の開発者コンテンツ ディレクトリと見なされることに注意してください (たとえば、/Applications/Xcode.app/Contents/Developer)。環境変数は、実際の Developer コンテンツ ディレクトリまたは Xcode アプリケーション ディレクトリのいずれかに設定できます。コード選択で提供される shims は、環境変数を Developer コンテンツの完全なパスに自動的に変換します。

したがって、質問では、Xcode アプリケーションだけでなく、ディレクトリ<whatever>へのフル パスを指定する必要があります。Developer

つまり、xcrun は明らかに DEVELOPER_DIR の値に依存していますが、ツール自体もそれに依存しているのでしょうか? 次の間に意味のある違いはありますか:

DEVELOPER_DIR=<whatever> command CC=$(xcrun -f --sdk macosx clang)

を使用xcrunしてツールを見つけて自分で呼び出すことができ、いつ設定および設定解除するかを心配するのDEVELOPER_DIRは非常に複雑に思えます。ドキュメントによるxcode-selectと、すべての「シム」はDEVELOPER_DIR設定を尊重します。ここでの「シム」は、 の Xcode コマンドを指します/usr/binxcrunその環境変数が正しく設定されている限り、検出/usr/bin/clangされたものの代わりに「/usr/bin/clang」を呼び出すだけで、 のclangバージョンを呼び出すことができますDEVELOPER_DIR。おそらく、ある種のビルド スクリプトを作成しているためにこの質問をしているのでDEVELOPER_DIR、そのスクリプトの早い段階で設定してから/usr/binコマンドを使用するだけで問題はないはずです。

command CC=$(DEVELOPER_DIR=<whatever> xcrun -f --sdk macosx clang)

プログラムは、親プロセスから環境を継承します。ここではclang、使用する の適切なコピーを見つけていますが、設定されていない環境でそれを呼び出しますDEVELOPER_DIR。これが重要かどうかは、使用しているツールが他のツールを呼び出すかどうかによって異なります。正直なところ、ツールのいずれかが他のツールを呼び出すかどうかはわかりませんが、そのようなツールがそれらのツールの多くを呼び出すことは論理的であるため、正しく設定されているxcodebuildことに依存しているようです。DEVELOPER_DIR

要するに、DEVELOPER_DIRビルド スクリプトで必要に応じて設定することのマイナス面はなく、呼び出しでのみ指定しようとすることはxcrun、一般的に代替アプローチよりも信頼性が低いようです。

于 2017-03-19T16:57:09.427 に答える