8
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

C++環境構築メモ (Mac, VSCode, GCC, 競プロ)

Last updated at Posted at 2022-02-21

はじめに

C++環境を構築したので、その時の備忘録を残す。競プロにおいて、C++のコンパイラは、Mac標準でインストールされているClangよりも、GCCの方が便利である。なので、今回はGCCをインストールした。

環境

  • MacOS BigSur
  • VSCode

1. コンパイラ(GCC)のインストール等

(1) gccコンパイラのインストール

% brew install gcc

(2) インストールされたGCCのバージョン確認

% ls -l /usr/local/bin | grep g++
g++ -> /usr/local/bin/g++-11
g++-11 -> ../Cellar/gcc/11.2.0_3/bin/g++-11
x86_64-apple-darwin20-g++-11 -> ../Cellar/gcc/11.2.0_3/bin/x86_64-apple-darwin20-g++-11

この段階で、下記コマンドを実行すると、コンパイルされて実行ファイルが生成される。

% /usr/local/bin/g++-{num} main.cpp

(3) シンボリック作成によるバージョン省略

/usr/local/bin内にg++をシンボリックリンクとして作成し、リンク先に/usr/local/bin内のg++-{num}を指定することで、バージョンを省略。

% ln -s /usr/local/bin/g++-{num} /usr/local/bin/g++

この段階で、gccのバージョンを省略した下記コマンドを実行すると、同様に、コンパイルされて実行ファイルが生成される。

% /usr/local/bin/g++ main.cpp

(4) コマンド検索パスの設定

以下のコマンドを実行したときの出力が、/usr/local/bin/g++ではなく、/usr/bin/g++だった場合は下記の設定をする必要がある。これはg++コマンドを実行した場合、インストールしたGCCではなく、mac標準でインストールされているClangが実行されてしまうことを意味する。

GCCが検索されている場合(所望)

% which g++
/usr/local/bin/g++

Clangが検索されている場合 -> 下記の設定を行う

% which g++
/usr/bin/g++

ClangではなくGCCが検索されるための設定

下記のコマンドを実行したときの出力で、/usr/local/bin/usr/binよりも上位にある場合、検索優先順位は/usr/local/binの方が高いので何もする必要はないので、次節に行ってok。もし、この状態でGCCが検索されないときはターミナルを再起動する。

% echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin

/usr/binの方が上位にある場合は、~/.zshrcexport PATH=/usr/local/bin:$PATHを書き込んで、下記のコマンドを実行。

% source ~/.zshrc

以上より、下記コマンドを実行することで、gccが検索されるようになっているはず。

% which g++
/usr/local/bin/g++

また、下記コマンドでも確認可能。

% g++ -v

そして、最終的にg++コマンドで、GCCコンパイラを呼び出せるようになる。

% g++ main.cpp

2. VSCodeのExtensionのインストール

  • C/C++ : コード整形、タグジャンプ、自動補完を行ってくれる。
  • Code-Runner : 言語(ファイル拡張子)ごとに実行するスクリプトの設定が可能 -> ショートカットキー([ctrl] + [opt] + [n] キーで、コンパイルから実行まで一度にできる)

(1) コード整形をファイル保存時に行うように設定

C/C++ Extensionにformatterが含まれているので、これでコード整形が可能になる。
コード整形するために[Alt] + [Shift] + [F]を毎回押すのはめんどくさいので、[cmd] + [s]でファイル保存時に整形されるように設定する。

手順

  1. [ファイル] > [基本設定] > [設定] で設定画面を開く。
  2. 検索ボックスに 『formaton』 と入力すると、
    『Editor: Format On Save』 があるので、これにチェックを入れる。

(2) Code-Runnerの設定

左側のExtensionタブを選択し、install済のCode Runnerを探す。
Code Runnerの歯車のマークをクリックし、Extension Settingsを選択。

右画面に設定画面が出てくるので
Code-Runner: Run In Terminalのチェックボックスを入れる。

3. stdc++.hを利用できるようにする

ヘッダファイルのstdc++.h をincludeすることで、競プロに必要なライブラリを一括でincludeすることができる。
なので、このヘッダファイルincludeできるようにする。
ただ現状では、
#include <bits/stdc++.h> を書くと下記のような破線で警告がでるハズ。(赤破線)
また、コンパイルしようとすると、stdc++.hが見つからず、エラーになる。

(1) stdc++.hをコンパイラが認識できる場所にコピー

stdc++.hは、GCCをインストールする後、/usr/local/下の奥深くの階層に存在する。
下記コマンドで場所がわかる。(バージョンは各自異なる)

$ cd /usr/local/
$ find . -name "stdc++.h"
./Cellar/gcc/11.2.0_3/include/c++/11/x86_64-apple-darwin20/bits/stdc++.h

コンパイラが認識できる階層は、/usr/local/下である。
なので、下記コマンドで/usr/local/include/下にbitsディレクトリを作成し、stdc++.hをコピー。

$ mkdir /usr/local/include/bits
$ cp ./Cellar/gcc/11.2.0_3/include/c++/11/x86_64-apple-darwin20/bits/stdc++.h /usr/local/include/bits/

これで、#includeをつけてコンパイル可能になる。
しかし、vscodeのIntellisense機能がstdc++.hを認識出来ていないため、
まだ緑破線で警告が出てしまう。

(2) C/C++ Intellisenseの設定

次に、インストールしたC/C++ Intellisense機能に/usr/local/include/bits/stdc++.hの存在を教えてあげる必要がある。

Command+Shift+P でコマンドパレットを開き、
「C/Cpp: Edit configurations」 を選択する。

{
    "configurations": [
        {
            "name": "Mac",
            "includePath": [
                "${workspaceFolder}/**",
                "/usr/local/include/**"
            ],
            "defines": [],
            "macFrameworkPath": [],
            "compilerPath": "/usr/local/bin/g++",
            "cStandard": "gnu17",
            "cppStandard": "gnu++17",
            "intelliSenseMode": "macos-gcc-x64"
        }
    ],
    "version": 4
}

includePathに"/usr/local/include/**"を追加し、
compilePathを"/usr/local/bin/g++"に変更すればok。

以上で、#include が正常に認識されるようになる。
ダメな場合は、vscodeを再起動してみると良い。

終わりに

やっぱり環境構築は、ちょっとめんどいですね。

参考

8
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?