VSCodeでC++のビルド環境構築メモ（Ubuntu）

よく忘れるので自分用メモ。CMake大好きマン向け。

## インストール

### 必要なパッケージインストール

```sh
sudo apt install gcc g++ make cmake
```

### VSCodeインストール

https://code.visualstudio.com/

上記からダウンロードして`dpkg`等でインストールします。

```sh
sudo dpkg -i code_1.79.2-1686734195_amd64.deb
```

### 拡張機能インストール

画像の拡張機能をインストールします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3302427/98194aee-beeb-6b6f-1a49-4b19de125ffb.png)

必須はC/C++、CMake、CMakeToolsのみ。以下は便利ツールです。

#### Todo Tree

ソースコードでコメントの先頭に`TODO`と書くと、コメントがハイライトされるようになります。また、アクティビティバー（左のファイル一覧とかデバッグとかから選択するやつ）のToDoリストが追加され相互参照できるようになります。あとでやらなきゃな～ということはとりあえず備忘録的に`TODO`コメント書いておくと便利。ちなみにC++以外も使えます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3302427/93601ea8-5002-4a54-7535-78beb47b3dd0.png)

#### VS Code Counter

プログラムのソースコードのライン数をカウントできます。こちらもC++以外も使えます。

#### Material Icon Theme

ただの好み。

## ワークスペースを開く

直下にトップレベルの`CMakeLists.txt`が存在するようにワークスペースを開きます。

```
workspace/
├── CMakeLists.txt
├── include/
└── src/
```

## CMakeLists.txtを書く

プログラムを書く前にCMakeLists.txtを書いておきます。IDEはデフォルトの状態ではBoostなど`/usr/include`などにない外部ライブラリのインクルードパスを認識しません。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3302427/7872bfd3-5056-73a1-dfee-9e6bd806401e.png)

この状態だと、IDEの予測機能などが使えないので不便ですが、`CMakeLists.txt`の`target_include_directories`にパスを記載しておくと上記のエラーが解消され、各種Lint機能が働くようになります。

```cmake
target_include_directories(
    ${PROJECT_NAME} PRIVATE
    /home/vboxuser/develop/library/boost/include
    ./include
)
```

逆にエラーが出るということは`CMakeLists.txt`の設定がどこかおかしく、どうせビルドに失敗するのでその前に直しておきます。`c_cpp_properties.json`にインクルードパスを設定することでもIDEのLint機能は使えるようになりますが、代わりに`CMakeLists.txt`の誤りに気づけなくなるので、自分はこちらは作成していません。

## プログラム実行時の引数と環境変数を設定する

ctrl+shift+pからコマンドパレットを開き、`C++`などと入力して「IntelliSense 構成を選択」→「g++を使用する」を選びます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3302427/f6479517-ea18-8166-4b1d-3039d67e7001.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3302427/24469f4a-8680-e419-767f-c5fffbd58757.png)

すると、ワークスペース内の`.vscode`ディレクトリに`settings.json`が生成されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3302427/725faec0-80f0-7008-7004-bc314d39a7ff.png)

実行時の引数は`cmake.debugConfig`、環境変数は`cmake.environment`に設定します。find_packageを使う場合は、`cmake.configureArgs`で`パッケージ名Config.cmake`のディレクトリを指定するといいです。

```json
{
    ・・・（略）・・・
    "cmake.debugConfig": {
        "args": [
            "argv1",
            "argv2"
        ],
    },
    "cmake.environment": {
        "TEST": "HOGEHOGE"
    },
    "cmake.configureArgs": [
        "-DBoost_DIR=/Path/to/Boost/cmake/dir",
    ],
}
```

## ビルドする

ステータスバー（一番下のバー）からBuildを押すと、`build`ディレクトリが作成され、ビルドが走ります。`CMakeLists.txt`を入れ子にしていたら、子要素も含めてビルドされます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3302427/3e409838-5824-cda4-fdb8-bbfafc86fe70.png)

## デバッグする

ブレークポイントを置くなどしてから、ビルド時と同じステータスバー（一番下のバー）から虫マークをクリックすることでデバッグが開始されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3302427/3f617c96-62e8-18f6-840a-a6e501227ca6.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3302427/1bbb355e-895a-0650-07d4-f7632dda3690.png)

## 実行する

デバッグの隣の右向き三角形を押すと、実行されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3302427/48ed22f3-32e6-f950-7e97-25faa7d512e4.png)