MacのC環境更新
ご多分に漏れずあんまり良くわかってないので、間違ってたら指摘していただけるとありがたいのですが、 MacはデフォルトでC言語が入っている(正確にはCLang)。が、バージョンが古いのでアプデしようと思ったのです。 それで、Homebewからgccをインストールしたんですね。
> brew install gcc //インストール
でもなんだかうまくいかない。調べてみる。
> gcc -v Configured with: --prefix=/Library/Developer/CommandLineTools/usr --with-gxx-include-dir=/usr/include/c++/4.2.1 Apple LLVM version 10.0.1 (clang-1001.0.46.4) Target: x86_64-apple-darwin18.6.0 Thread model: posix InstalledDir: /Library/Developer/CommandLineTools/usr/bin
うん、これデフォルトのまま。まず、シンボリックリンクを貼って、ターミナルにgccと打ったときに認識されるようにする。
> ls /usr/local/bin | grep gcc > ls /usr/local/bin | grep g++
現在はgcc-9などがあるので、それを使う。
> ln -s /usr/local/bin/gcc-9 /usr/local/bin/gcc > ln -s /usr/local/bin/g++-9 /usr/local/bin/g++
はい、これでいけますかね。
> gcc -v Configured with: --prefix=/Library/Developer/CommandLineTools/usr --with-gxx-include-dir=/usr/include/c++/4.2.1 Apple LLVM version 10.0.1 (clang-1001.0.46.4) Target: x86_64-apple-darwin18.6.0 Thread model: posix InstalledDir: /Library/Developer/CommandLineTools/usr/bin
えー、いけない。ちょっとここで気づいたのだけれど、
>which g++ /usr/bin/g++
(which gccはなぜか反応しなかったので、こっちでチェックした)あ、これ/usr/local/bin/g++よりも先に/usr/bin/g++が来てますね。で、つまり、シェルに対して優先的に探すパスを変更する必要がありますね。
6月27日追記:おそらくこのタイミングでターミナルを再起動すれば問題ない気がする。
/usr/bin/はPC全体の、/usr/local/bin/は個別のユーザーに対してですよね、どう見ても。
まあそれで、zsh使ってるんで優先パスの通し方を探したんだけど、bashのばっか。最終的にホームディレクトリ下のzprofileをいじればいいことに気づく。
> cd //一応 > open .zprofile
するとこの中に
# Set the list of directories that Zsh searches for programs. path=( /usr/local/{bin,sbin} $path )
という部分があるので、ここを
path=( /usr/local/bin /usr/local/{bin,sbin} $path )
ととりあえずしてみる。解決!gccと打ってデフォでHomebrewで入れたgcc-9が呼び出されている。 ただ、この優先パスの書き換えで他のところに影響がでるかもしれないし、このパスの通し方が冗長である、間違ってる可能性があるので、何があっても自己責任で。。。
6月27日追記 それで、おそらくこの部分が悪さをしていると考えられることが生じた。 具体的には、これを変更したあと初めてvs Codeを再起動したら、latex workshop経由のtexのコンパイルが通らなくなった。 どうも環境変数パスからlatex等のコマンドが見つからなくなったせいらしい。つまり、この部分の変更でなにか変なことが生じたみたいだ。 環境変数について少し理解が深まったのだが、いかんせんどこで永続的に$PATHが定義されているのかよくわからない。おそらく.zprofileの上の部分だと思うのだけれど、そうなるとこのファイル内の$pathはどこで規定されてるの???
とりあえず、動けばいいのでもとに戻した。しかも普通にwhich g++で/usr/local/bin/g++が出てくる。この前インスコ後に一度ターミナルを再起動させなきゃいけなかったのだろうか。