MacOS CatalinaでVisualStudioCodeの環境設定【競技プログラミング(C++)】

# はじめに
今年はなんとなく新しいことを始めたいなと思ってたところ、Google入社エントリというのを発見。面白いので読んでみたらその中で「競技プログラミング」というのが出てきたのでググってみた。この際C++も勉強してみようということでとりあえず、環境設定からだろう。VSCodeの設定の仕方を記載。

## Xcodeのインストール
Homebrewを使うにはCommand line tools for Xcodeが必要。

```
xcode-select --install
```
ここが選択されてなかった場合、選択する必要あり。
![68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f313032323938382f34666662623432312d613939622d626438392d356132662d3736366664363633643833652e706e67.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1022988/6a753d37-ce40-e262-8588-d7c94819315a.png)


## Homebrewのインストール
ここからコピペでインストール
https://brew.sh/index_ja.html

```
brew --version // version確認
brew doctor    // 問題をチェックしてくれるコマンド
// Your system is ready to brewと表示できればok
```

## gccのインストール
MacOSは標準でC++のコンパイラのClangが既に入ってるが、
C++の標準ライブラリの集合体である`bits/stdc++.h`が使えない。
実務レベルでは微妙らしいが、競技プログラミングではこれを使用出来る方が効率が良い。
んで、`gcc`はこれが使えるので、切り替える作業が必要。

```
brew install gcc

// clang(実体)のままになっている
which gcc
/usr/bin/gcc
which g++
/usr/bin/g++ 

// 切り替え
ln -s /usr/local/bin/gcc-10 /usr/local/bin/gcc
ln -s /usr/local/bin/g++-10 /usr/local/bin/g++

// gccが実行されるようになる
which gcc
/usr/local/bin/gcc
which g++
/usr/local/bin/g++ 
```

## VSCodeダウンロード
Downloadはこちらから
https://azure.microsoft.com/ja-jp/products/visual-studio-code/

## プラグインのインストール
![sample002.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1022988/6c293cc4-54c7-7fe4-8e8e-c0750b5a0225.png)
![sample003.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1022988/45313354-a355-0524-ab46-41fb9e737c77.png)
![sample004.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1022988/c8ea00c4-6825-d90d-3018-5707b8f24c5d.png)
こちらをインストールする。

## Code Runnerの設定
![スクリーンショット 2021-01-21 19.28.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1022988/efddfa3b-c836-6bb1-1be7-3be225947ac9.png)
実行結果を確認したい場合、上記の「▷」を押下して確認出来るようにしたいので、下記の設定をする。
`command + Shift + p`で`setting.json`入力後、`Open setting(JSON)`を開き下記を追加する。

```
    "code-runner.clearPreviousOutput": true,
    "code-runner.runInTerminal": true,
```

## Code-Runner: Run In Terminalの設定
![sample006.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1022988/905a19b6-2185-9867-d422-5f1ab6cb3595.png)
INSALLEDで`Code Runner`の右に「歯車アイコン」があるので`Extension Settings`を選択。

![sample007.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1022988/b7894c16-ef47-82a8-0772-84662f9525cb.png)
下部の方に`Code-Runner: Run In Terminal`があるのでチェックを入れる。

## tasks.jsonの作成
`command + Shift + p`で`Tasks: Configure Task`を入力して適当に`tasks.json`を作成する。ファイルが自動生成された後にエディター画面に表示され、タスクランナーの構成表示される。

```
{
    "version": "2.0.0",
    "tasks": [
        {
            "type": "shell",
            "label": "C/C++: g++ debug build",
            "command": "/usr/local/bin/g++",
            "args": [
                "-O0",
                "-g",
                "${file}",
                "-o",
                "${fileDirname}/${fileBasenameNoExtension}"
            ],
            "options": {
                "cwd": "/usr/local/bin"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            }
        }
    ]
}
```
コピペで上書きしておく。

## launch.jsonの作成
![スクリーンショット 2021-01-21 19.55.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1022988/1134233f-06be-61a9-8726-08ee2a4647fd.png)
デバッグメニューを開き`Run And Debug`を押下して`launch.json`の作成をする
![スクリーンショット 2021-01-21 19.56.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1022988/00f80bfb-c49f-aa40-9ca1-270547d08333.png)
`C++(GDB/LLDB)`を選択すると自動で作成される。これで使えるようになる。

```
{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "(lldb) Launch",
            "type": "lldb",
            "request": "launch",
            "program": "${fileDirname}/${fileBasenameNoExtension}",
            "args": [],
            "cwd": "${workspaceFolder}",
            "preLaunchTask": "C/C++: g++ debug build"
        }
    ]
}
```
※ もし、作れない場合はこれをコピペで貼り付ける。

## #include＜bits/stdc++.h>が使えない問題を解消
```
ls -la /usr/local/Cellar/gcc/10.2.0_2/include/c++/10.2.0/x86_64-apple-darwin19/bits/stdc++.h
/usr/local/Cellar/gcc/10.2.0_2/include/c++/10.2.0/x86_64-apple-darwin19/bits/stdc++.h

cd /usr/local/include/
cp /usr/local/Cellar/gcc/10.2.0_2/include/c++/10.2.0/x86_64-apple-darwin19/bits/stdc++.h .
```
自分のインストールしているVersionによってPATHは異なるので確認は必要。
こちらでVSCodeを再起動して使えるようにする。

コードを書いて右上の「▷」を押下すると自動でEditerのTerminalが立ち上がり結果が表示される。
入力する場合は、Terminalに入力して結果を表示される。

## コンパイルがうまくいかない時
突然Debug機能が使えなくなることがあり、頭を悩ませていました。

``` Error内容.
collect2: fatal error: cannot find 'ld'
```
直し方としては`setting.json`で指定している
下記が`false`だったのを`true`にした。

```
"terminal.integrated.inheritEnv": false
```

##### 参考記事
* https://qiita.com/kaikusakari/items/6b2c0b9ad95ba50ad45b
* https://qiita.com/ageprocpp/items/d5111699f9e8a0d88c89
* https://qiita.com/EngTks/items/ffa2a7b4d264e7a052c6