WSLとVisual Studio CodeでC/C++開発環境を楽して作る(2019年7月)


はじめに

既に色んなところで「VSCodeでC/C++開発環境を構築する手順」が溢れているけど、Visual Studio 付属の cl.exe を使う内容だったり、MinGW のためにコンフィグを書く内容だったり、WSL と VSCode の橋渡しに苦労する内容だったりする。

今年5月に使えるようになったらしい Remote Development を使うとかなり楽にできたので、似たネタは既出だけどオレオレ環境を簡単にまとめ。

ポイント

  • VSCode さんが WSL をよろしくやってくれるため、頑張ってコンフィグを書かなくてよい
  • C++ でなくても WSL で動く Python や、リモートサーバで動く PHP などにも同様に使える
  • MinGWやcygwinじゃないので、すごくLinuxで、とてもWSLていう感じ

環境

  • Windows 10 (ver 1809)
  • Visual Studio Codeはインストール済みの想定
    • 少し前はinsider版である必要があったそうだが、やってみたら安定版でもできた
  • WSLの導入についても省略
    • 私の環境は Ubuntu 18.04LTS だが、なんでもよいはず

WSLの準備

Linux側でgccgdbが使えるようにする。あらかじめsudo apt updateなどをしておくと善い。次のコマンドで一括していろいろをインストールできる。

sudo apt install build-essential

インストール後に念の為、gcc -vgdb -vを試すと佳い。ちなみに、私の環境だとgdbが入らなかったようなので、apt install gdb もした。

VSCode に拡張機能 Remote Development を入れる

Remote Development - Visual Studio Marketplace を開きinstallボタンを押してVSCodeの拡張をインストールする。

※ Remote Development は WSL 向けの Remote-WSL だけでなく SSH や Docker 向けの拡張も含むパッケージなので、気になる人は WSL 向けのみをインストールすればよいかと

C++ をビルドしてみる

ディレクトリの作成

プロジェクトとして /mnt/c/CppTest/(WinのパスでC:\CppTest\に対応)みたいなディレクトリを作る。そこで、

cd /mnt/c/CppTest
code .

とすると、WSL に接続された VSCode が開く。最初はファイアウォールが立ち上がったり、VSCode の設定が実行されたりで少し時間がかかる。

起動すると、WSLと接続している感じのあるアイコンが左下に出てくる。ちょっとした達成感

VSCodeにC++拡張機能を入れる

WSL に接続した VSCode では、ローカル側の拡張とWSL側の拡張の2種類があり、C/C++ 拡張は後者のリモート側にインストールしなくてはならない点に注意。

cppファイルを開くとインストールをおすすめされるので、未導入の場合はそこでインストールするのが分かりやすい。ローカル(Windows)のVS Code に既に導入されているなら、

「インストール on WSL」でWSL側にもインストールすることができる。

main.cppの作成とビルド

プロジェクトディレクトリに次の main.cpp を作ってみる。

#include <cstdio>

int main()
{
    for (int i = 0; i < 10; i++)
    {
        printf("ふぇぇ… %d\n", i);
    }
    return 0;
}

1行目だけかろうじてC++っぽい以外はべたべたなC言語だけど、C++としてビルドします。ショートカットキーCtrl+Shift+Bで、こんな感じにコンパイラを選べるので、

今回はg++を選択。なお、歯車のアイコンをクリックするとtask.jsonがディレクトリに生成されて次回から選択が省略できる。次節のデバッグにはtask.jsonが必要なので、この時点で生成しておくのが佳い。

コンパイルが成功したら、VS Codeで実行を確認してみる。ソースファイルと同名の実行ファイルが作成されているので、Ctrl+@を押してターミナルを開き、./mainを実行する。

デバッガを使う

適当なところにブレークポイントをおいて、gdbを試してみる。F5でデバッグを実行しようとすると、言語や環境の選択を求められるので、


適当に選んであげるとデバッグが始まる。

こんなプログラムでも、ブレークポイントで一時停止したり、変数が表示されたりするのが確認できた。やったぁ

「タスク'g++ build active file'を見つけられませんでした。」


と表示されてデバッグ出来ないのは、デバッグ前に'g++ build active file'という名のタスクを実行しようとしたが、そのタスクが見つからないから。ダイアログの「タスクの構成」を選択し、さらに構成するタスクを適切に(今回はg++)を選択すればtask.jsonが生成されて、デバッグできるようになるはず。

あとがき

dockerを動かせるWSL2の正式版が近い将来出るそうだし、より一層 Windows が開発者向けとして佳くなりますね。今までOSがWinというだけで迫害されてきた開発者たちも、もはやただ高いだけのMacから 馬鹿にされることはなくなるでしょう。素敵な未来です