はじめに
既に色んなところで「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側でgcc
やgdb
が使えるようにする。あらかじめsudo apt update
などをしておくと善い。次のコマンドで一括していろいろをインストールできる。
sudo apt install build-essential
インストール後に念の為、gcc -v
やgdb -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から 馬鹿にされることはなくなるでしょう。素敵な未来です