Macでgccを使う方法(Apple Clangじゃないやつ)Apple Silicon M1/M2/M3/M4対応
私自身様々な記事を回ったが、結構沼ってしまったので記事にすることにした。この記事に辿り着いた人はきっとうまくいく、はず、、。
はじめに:Macの gcc は デフォルトではClang
Mac のターミナルで gcc や g++ を実行すると、実は 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++.h は GNUの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 の違い
gcc や g++ を本物の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