動機
macOSにXcodeをインストールした状態(おそらくほとんどの開発用Macはこの状態)では、g++コマンドでclang版が動作するため、GCC版と若干挙動が異なる。
Linuxでgcc
,g++
を使う場合はGCC版が基本となることが多いので、maxOSでの動作もLinux版に合わせておきたい。
maxOSの初期状態でのg++
バージョン情報を出力すると、Apple clangと表示されていることがわかる。
$ g++ --version
Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/c++/4.2.1
Apple clang version 11.0.3 (clang-1103.0.32.59)
Target: x86_64-apple-darwin19.4.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
macOSにGCCのg++を導入する
HomebrewでGCCをインストールする。
brew install gcc
インストールされたものを g++
コマンドで使えるようにシンボリックリンクを張る。
コマンドとしては、g++のバージョンによってインストールされるファイル名が/usr/local/bin/g++-9
などのように異なるので、最新のものをg++
として使用するようにしている。
bash
sudo ln -sf $(ls -d /usr/local/bin/* | grep "/g++-" | sort -r | head -n1) /usr/local/bin/g++
fish
sudo ln -sf (ls -d /usr/local/bin/* | grep "/g++-" | sort -r | head -n1) /usr/local/bin/g++
導入後
GCC版に切り替わった。
$ g++ --version
g++ (Homebrew GCC 9.3.0_1) 9.3.0
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
元に戻したいとき
作成したシンボリックリンクを解除する。
sudo unlink /usr/local/bin/g++