LoginSignup
4
4

More than 3 years have passed since last update.

tasks.jsonで変数に含まれるバックスラッシュが除去されてしまう

Last updated at Posted at 2021-02-13

やりたいこと

  • 環境は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.cppC:testhoge.cppとしてコマンドライン出力されている

解決策

  • "\"${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

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4