homebrewでgccをインストールする

Xcode付属のclangがいまいち使えなかったので、homebrewでgccをインストールすることにしました。その導入手順のメモです。

gccのインストール

はい、brewコマンド一発でインストール自体は完了します。

$ brew install gcc

ただ、Xcode付属のclangが既にインストールされていた場合、gccコマンドを叩いてもclangが呼ばれてしまいます。

# Xcode付属のclangが呼ばれる
$ gcc -v
Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/usr/include/c++/4.2.1
Apple LLVM version 10.0.1 (clang-1001.0.46.4)
Target: x86_64-apple-darwin18.7.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin

なので、gccコマンドを叩いたときにhomebrewでインストールしたgccが呼ばれるように設定してやる必要があります。

homebrewでインストールしたgccが呼ばれるようにする

2019年8月現在、homebrewでインストールされるgccはバージョン9系が入るので、gcc/g++という名前でシンボリックリンクを貼ってやります。

$ ln -s /usr/local/bin/gcc-9 /usr/local/bin/gcc
$ ln -s /usr/local/bin/g++-9 /usr/local/bin/g++

これで、gcc/g++コマンドへのパスが通ります。が、Xcode付属のclangが入っていると、gccという名前の実質clangコンパイラが優先して探索されてしまいます。

# 環境変数のディレクトリ内からgccという名前のコマンドをすべて見つけ出す
$ which -a gcc
/usr/local/bin/gcc <-こっちがhomebrewでインストールしたgcc
/usr/bin/gcc <-こっちはXcode付属のgcc(実質clang)

# gccコマンドを叩いた場合に実行されるコマンド
$ which gcc
/usr/bin/gcc
$ which -a g++
/usr/local/bin/g++
/usr/bin/g++

$ which g++
/usr/bin/g++

なので、.bash_profileあたりに以下の設定を追加します。

export PATH="/usr/local/bin:$PATH"

最後の.bash_profileを再読み込みすると、homebrewで導入したgcc/g++が優先して使われるようになります。

$ source ~/.bash_profile
$ which gcc
/usr/local/bin/gcc

$ which g++
/usr/local/bin/g++

$ gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/local/Cellar/gcc/9.2.0/libexec/gcc/x86_64-apple-darwin18/9.2.0/lto-wrapper
Target: x86_64-apple-darwin18
Configured with: ../configure --build=x86_64-apple-darwin18 --prefix=/usr/local/Cellar/gcc/9.2.0 --libdir=/usr/local/Cellar/gcc/9.2.0/lib/gcc/9 --disable-nls --enable-checking=release --enable-languages=c,c++,objc,obj-c++,fortran --program-suffix=-9 --with-gmp=/usr/local/opt/gmp --with-mpfr=/usr/local/opt/mpfr --with-mpc=/usr/local/opt/libmpc --with-isl=/usr/local/opt/isl --with-system-zlib --with-pkgversion='Homebrew GCC 9.2.0' --with-bugurl=https://github.com/Homebrew/homebrew-core/issues --disable-multilib --with-native-system-header-dir=/usr/include --with-sysroot=/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk
Thread model: posix
gcc version 9.2.0 (Homebrew GCC 9.2.0)

注意点として、環境変数のパスの優先順位を変えたので、/usr/bin/usr/local/bin内に同じ実行ファイルがあった場合、今まで/usr/bin内の実行ファイルが使われていたのが、/usr/local/bin内の実行ファイルが使われるようになりますので気をつけましょう。

/usr/local/bin内のコマンドは基本的にユーザが意図して入れたもののはずなので、困ったらアンインストールしてしまってもいいんじゃないかなと思います。

コメント