✍️

Macでgccを使う方法(Apple Clangじゃないやつ)Apple Silicon M1/M2/M3/M4対応

に公開

私自身様々な記事を回ったが、結構沼ってしまったので記事にすることにした。この記事に辿り着いた人はきっとうまくいく、はず、、。

はじめに:Macの gcc は デフォルトではClang

Mac のターミナルで gccg++ を実行すると、実は Apple製の Clang という C/C++ コンパイラが呼び出される。

gcc -v
# または
g++ -v

出力の一番上に Apple clang version ... と表示されていれば、それは本物の GCC ではない。

なぜ本物の GCC を使いたいのか?

競技プログラミングなどでは、以下のように bits/stdc++.h を使うコードを書くことがある。

#include <bits/stdc++.h>
using namespace std;

さまざまなヘッダーファイルを一括でインポートできて便利だが、この bits/stdc++.hGNUのg++ に特有のヘッダで、デフォルトのClangでは使えない。

1. Homebrew で GCC をインストールする

Homebrewの導入方法は他サイトでも多数解説されているので割愛する。
以下のコマンドを実行する。

brew install gcc

完了後に以下のコマンドで、インストールされているか確認できる。

brew list | grep gcc
# => gcc などが出ればOK

2. Homebrew のインストール場所を確認する

Apple Silicon (M1/M2/M3/M4) の場合、Homebrew は /opt/homebrew/ にインストールされているはず。

which brew
# => /opt/homebrew/bin/brew

3. GCC のバイナリの場所を確認する

次に、gccとg++がどこにあるのか一応確認する。

ls /opt/homebrew/bin | grep gcc
# => gcc-15 などがあればOK
ls /opt/homebrew/bin | grep g++
# => g++-15 などがあればOK

4. gcc / g++ を GNU版に切り替える(シンボリックリンク)

以下のコマンドで、gcc というコマンド名で gcc-15(GNU版)が呼ばれるようになる。

sudo ln -fs /opt/homebrew/bin/gcc-15 /opt/homebrew/bin/gcc
sudo ln -fs /opt/homebrew/bin/g++-15 /opt/homebrew/bin/g++

これで gcc / g++ を打ったときに GNU バージョンが使われるようになる。

5. .zshrc にパスを通す

ターミナル初期設定では、/opt/homebrew/bin$PATH に含まれていない。

ホームディレクトリで以下のコマンドを実行してまず.zshrcを開く。

open .zshrc

以下の1行を追加する。

export PATH="/opt/homebrew/bin:$PATH"
  • PATH とは、コマンドを探すための検索パスのこと
  • /opt/homebrew/bin を先頭に追加することで、ClangよりもHomebrewの gcc が優先される。

.zshrc を編集したら、設定を反映させるために以下を実行する。(ターミナルの再起動でもOK)

source ~/.zshrc

6. 切り替わったか確認する

which gcc
# => /opt/homebrew/bin/gcc

gcc -v
# => gcc version 15.x.x (Homebrew GCC 15.x.x)

which g++
# => /opt/homebrew/bin/g++

g++ -v
# => g++ version 15.x.x (Homebrew GCC 15.x.x)

補足:シンボリックリンクと alias の違い

gccg++ を本物のGCCに切り替える方法には、次の2つの手段がある。

シンボリックリンク(ln -s

sudo ln -fs /opt/homebrew/bin/gcc-15 /opt/homebrew/bin/gcc
sudo ln -fs /opt/homebrew/bin/g++-15 /opt/homebrew/bin/g++
  • システム全体で gcc / g++ が GNU版に置き換わる
  • スクリプトや Makefile、CMake などでも gcc が使われるようになる
  • PATH/opt/homebrew/bin が含まれていれば動作する

エイリアス(alias

# ~/.zshrc に追加
alias gcc='/opt/homebrew/bin/gcc-15'
alias g++='/opt/homebrew/bin/g++-15'

その後に:

source ~/.zshrc
  • ターミナル上の手打ちコマンドにだけ影響
  • スクリプトや make では効果なし
  • 環境を汚さないので手軽に試せる

どちらを使うべきか

目的 手段
ターミナル操作だけで使いたい alias
他のユーザーやシステム全体に反映したい シンボリックリンク
とりあえず試したいだけ alias

ターミナルでしか使わなければとりあえず alias、エディターの拡張機能等で使用する場合はシステム全体を切り替えた方がいろいろと都合が良さそう。

おわりに

これで bits/stdc++.h を含む C++ コードも Macのターミナルでコンパイルできるようになります!

Discussion