👨‍💻

C++ を Windows + WSL2 + VSCode でコンパイル

2021/01/14

Windows10 + WSL2 + VSCode の環境で C++ ファイルをコンパイルするための環境構築についてまとめました。以下の手順で進めていきます;

  1. WSL2 環境のセットアップ
  2. Visual Studio Code のインストールと設定
  3. C++コンパイラの設定

WSL2 環境のセットアップ

Linux 用サブシステムの有効化

  • Windows を最新バージョンに更新
  • Windows キーを押して、「Windows の機能の有効化または無効化」を入力
  • Linux 用 Windows サブシステム」「仮想マシンプラットフォーム」を選択

以上を行った後、再起動します。再起動後、コマンドプロンプトで下記を実行します;

wsl --set-default-version 2

Ubuntu のインストール

Microsoft Storeまたはここから Ubuntu をインストールします。LTS バージョンであれば何でも良いと思います。インストールの最中に username/password を求められますので入力します。これらは Ubuntu で sudo をするときなどに必要になります。

Visual Studio Code のインストールと設定

Visual Studio Code をダウンロードします。セットアップが完了したら、下記の拡張機能をインストールしておきます;

vscode のターミナルは、WSL2 を見るように設定しておいてください。あるいは設定しなくても、プロジェクトを開く際に「Open Folder in WSL」で開けば、ターミナルは WSL2 を見てくれると思います。

C++コンパイラの設定

コンパイラのインストール

WSL2 環境に、build-essentialgdb をインストールします。Ubuntu からでも、vscode のターミナルからでも OK です。

sudo apt-get update
sudo apt install build-essential -y
sudo apt install gdb -y

C++構成

Ctrl+Shift+P から C/C++ 構成の編集 - Edit Configuration(JSON) を選択します。ルートディレクトリに .vscode/c_cpp_properties.json が作成されますので、下記の内容で上書きします;

.vscode/c_cpp_properties.json
{
  "configurations": [
    {
      "name": "WSL",
      "includePath": ["${workspaceFolder}/**", "/usr/include/**"],
      "defines": ["_DEBUG", "UNICODE", "_UNICODE"],
      "compilerPath": "/usr/bin/gcc-9",
      "cStandard": "c11",
      "cppStandard": "c++17",
      "intelliSenseMode": "gcc-x64"
    }
  ],
  "version": 4
}

ビルドタスクの作成

Ctrl+Shift+B を入力すると、既定のビルドタスクを選択できます。

  • No build task ... をクリック
  • Create task.json ... を選択
  • Others を選択

.vscode/tasks.json が作成されますので、下記の内容で上書きします;

.vscode/tasks.json
{
  "version": "2.0.0",
  "tasks": [
    {
      "type": "shell",
      "label": "C/C++: g++-9 compile file",
      "command": "/usr/bin/g++-9",
      "args": [
        "-std=gnu++17",
        "-Wall",
        "-Wextra",
        "-Wshadow",
        "-Wconversion",
        "-fsanitize=undefined",
        "-ggdb",
        "${file}",
        "-o",
        "${fileDirname}/${fileBasenameNoExtension}"
      ],
      "problemMatcher": ["$gcc"],
      "group": {
        "kind": "build",
        "isDefault": true
      }
    }
  ]
}

vscode を再起動

Ctrl+Shift+P から Reload Window をしておきます。

コンパイル実行

みんな大好き Hello, world! を作成してみます。プロジェクトを作成するときは、必ず「Open Folder in WSL」から Ubuntu のホームディレクトリ ~ 配下へプロジェクトやファイルを作成するようにしてください。/mnt/c/ 配下だとパフォーマンスが著しく低下します。

first/a.cpp
#include <stdio.h>

int main(void)
{
  printf("Hello, world!\n");
  return 0;
}

コンパイルしたい cpp ファイルを表示して、画面上で Ctrl+Shift+B を入力してください。同じディレクトリに a が作成されれば成功です。

ターミナルでファイルを実行してみましょう;

./first/a
Hello, world!

成功です!

references

Writings

blogsnippetcourse
Home©︎ suzukalight