VSCodeの拡張機能Code Runnerを使うとショートカット(Ctrl+Alt+N)あるいはボタン一発でソースコードのコンパイルから実行までをやってくれる。
Windows用VSCode上のwsl(ubuntu)でC++で書かれたソースコードを実行するための、Code Runnerの設定について備忘録を残しておく。wsl、VSCodeの環境構築はできている前提。
同じ環境ができている方は4.まとめの記述をsettings.jsonにコピペすればok。
1.出力先をターミナルに変更する
初期状態では実行結果が「出力」に出るため、標準入力が使えない。
settings.jsonに以下の設定を追加すると出力先がターミナルに変更される。
"code-runner.runInTerminal": true,
規定のシェルがコマンドプロンプトになっている人はここまででok。
2.wsl用にディレクトリの書式を変更
C++で書かれたコードに対してCode Runnerを実行すると
cd $dir && g++ $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt
というコマンドが既定のシェルで実行される。パラメーターの意味は以下の通り。
$dir
:ソースコードのあるディレクトリ
$fineName
:ソースコードのファイル名
$fineNameWithoutExt
:ソースコードのファイル名から拡張子を除いたもの
この時初期設定では$dir
がwindowsの書式(c:\foo\bar)になってしまう。そのため規定のシェルがコマンドプロンプトなどであれば以上の設定で使えるが、wslを使っている場合はC++を動かせない。
そこで"code-runner.terminalRoot":"/mnt/"
をsettings.jsonに書き込むと$dir
がLinuxの書式になって実行できるようになる。
3.その他設定
3-1.コマンドの詳細設定
code-runner.executorMapをsettings.jsonに書き込むと、Code Runnner実行時のコマンドは書き換えることができる。この設定は言語ごとに行う。cとc++では以下の通りに書く(初期設定そのまま)。
"code-runner.executorMap": {
"c": "cd $dir && gcc $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt",
"cpp": "cd $dir && g++ $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt",
}
コードテストのために使いたいので、ファイル名はa.out
に統一し実行時には./
を付け加えれば次の通り。
"code-runner.executorMap": {
"c": "cd $dir && gcc $fileName -o a.out && ./a.out",
"cpp": "cd $dir && g++ $fileName -o a.out && ./a.out",
}
3-2.実行後すぐにターミナルにフォーカスする
初期設定ではCode Runnerを実行してもエディタがフォーカスされたままだが、settings.jsonに以下の記述を加えると実行後自動的にターミナルがフォーカスされる。
"code-runner.preserveFocus": false,
何度も同じサンプルでテストしたいときに便利。
4.まとめ
settings.jsonに次のように記述すればよい。
"code-runner.executorMap": {
"c": "cd $dir && gcc $fileName -o a.out && ./a.out",
"cpp": "cd $dir && g++ $fileName -o a.out && ./a.out",
},
"code-runner.runInTerminal": true,
"code-runner.preserveFocus": false,
"code-runner.terminalRoot": "/mnt/",