やりたいこと
- 環境はWindows10(ファイルパスの区切り文字が
\
) -
tasks.json
にg++でcppファイルをコンパイルするタスクを定義する - コンパイル対象は「今アクティブなウィンドウで開いているファイル」
- 今回の例では
C:\test\hoge.cpp
とする
- 今回の例では
つまづいたこと
- 以下のようなタスク定義を
tasks.json
に記述
tasks.json
{
"version": "2.0.0",
"tasks": [
{
"label": "g++ compile",
"type": "shell",
"command": "g++",
"args": [
"-g",
"${file}",
"-o",
"${fileBasenameNoExtension}.exe"
],
"group": {
"kind": "build",
"isDefault": true
}
}
]
}
- 想定している実行コマンドは
g++ -g C:\test\hoge.cpp -o hoge.exe
- タスクを実行すると
g++.exe: error: C:testhoge.cpp: No such file or directory
のエラー- tasks.argsの
${file}
に含まれている\
が除去※されている模様
※C:\test\hoge.cpp
がC:testhoge.cpp
としてコマンドライン出力されている
- tasks.argsの
解決策
-
"\"${file}\""
と記述する(ダブルクォートで囲むことで内部のバックスラッシュが除去されない)- この時の実行コマンドは
g++ -g "C:\test\hoge.cpp" -o hoge.exe
となり、期待通り動作する
- この時の実行コマンドは
- 今回は
tasks.json
の例だが、launch.json
とかでも解決策は同じ
tasks.json
{
"version": "2.0.0",
"tasks": [
{
"label": "g++ compile",
"type": "shell",
"command": "g++",
"args": [
"-g",
"\"${file}\"", // ★ここ
"-o",
"${fileBasenameNoExtension}.exe"
],
"group": {
"kind": "build",
"isDefault": true
}
}
]
}
参考
公式ドキュメント:Variables Reference
今回の対応方法が書いてあるissue:" doesn't work correctly in tasks.json