質問: macOSでcommand line toolsを切り替えるにはどうすればいいのでしょうか? 私の環境には2つのcommand line toolsがインストールされています。 下記、1と2を切り替えながら使いたいのです。 XCodeのPreferencesのlocationsのCommand line toolsのところを見ても、XCodeに付属してきたものだけが表示されており、切り替えられません。 1. Xcode に付属してきたもの (`/Applications/Xcode.app/Contents/Developer`に存在している) 2. Apple の DeveloperサイトからCommand line toolsだけをダウンロードし、インストールしたもの (Command line tools beta1 for XCode 10) (`/Library/Developer`にインストールされている)
回答: 一般的にはこういう場合は仮想マシンを使ったりパーティションでアクティブなツールを切り替えたりする方が間違いがなくて良いと思うのですが、`command line tools`を`Terminal`からのみ使うのでしたら、こういう方法で可能かも知れません。 まず、Terminalから実行するXcodeの`command line tools`は`/Applications/Xcode.app/Contents/Developer`下にあるものが実行されているわけではありません。 これは、Terminalから`which clang`または`wich swiftc`してみると、`/usr/bin/`下の両コマンドが表示されることから確認出来ます。 Developer下には、更に`usr`フォルダ。更にその下に`bin`があり、ここに実行ファイルやライブラリーが置かれています。 なので、`$HOME`に、`.xcode10beta`というファイルを作り、そこで`PATH`の参照順番を変えて上げます。 具体的には ``` export PATH=/Library/Developer/usr/bin:$PATH export CC=/Library/Developer/usr/bin/clang export CXX=/Library/Developer/usr/bin/clang++ export CFLAGS="-I/Library/Developer/usr/local/include -std=gnu99 -arch x86_64 -Os" export CXXFLAGS="-I/Library/Developer/usr/local/include -std=gnu++11 -arch x86_64 -Os" export LDFLAGS="-L/Library/Developer/usr/local/lib -Os -arch x86_64" ``` の様な内容のファイルを作ります。 このファイルはbash/zsh系用ですのでcsh系を使われている場合は適宜書き替えて下さい。 実行環境を切り替える場合は、コマンドラインから`source ~/.xcode10beta`とタイプして実行するとコマンドラインツールが切り替わると思います。 大事なのは1行目で、今までの実行ファイルのサーチパスの「前に」`/Library/Developer/usr/bin`を書くことで、同名の実行ファイルがあるときは、`/Library/Developer/usr/bin`にある実行ファイルを優先させることです。 2行目以降は`clang` Cコンパイラへのオプションなので`swiftc`を使う時は`swiftc --help`でswiftファイルをコンパイルする時の環境の設定の仕方を調べて適宜書き替えてお使い下さい。