VScode завершает WSL с ошибкой при выполнении любой задачи сборки. - PullRequest
0 голосов
/ 16 февраля 2019

У меня есть задача сборки в vscode, которая запускает "make" в моем терминале по умолчанию, который я настроил как WSL.Проблема заключается в том, что независимо от того, какую команду я запускаю, терминал всегда мгновенно завершает работу с ошибкой /bin/bash: - : invalid option.Я не могу найти ни одного примера в интернете, где бы это происходило.

Я пытался установить в конце моей строки \ n и разные вещи, начиная с здесь , но, похоже, ничего не работает.

Моя задача

{
    "version": "2.0.0",
    "type": "shell",
    "tasks": [
        {
            "label": "build",
            "command": "make",
        }
    ]
}

Что я делаю не так?

1 Ответ

0 голосов
/ 02 марта 2019

Я могу воспроизвести ту же проблему с vscode 1.31.1 (настройка пользователя) и WSL, поставляемым с Microsoft Windows 10.0.17134.619 (под управлением Ubuntu 18.04).

Когда оболочка по умолчанию в vscode настроена наWSL Bash, следующий файл tasks.json завершится с ошибкой, о которой сообщалось выше:

{
    // See https://go.microsoft.com/fwlink/?LinkId=733558
    // for the documentation about the tasks.json format
    "version": "2.0.0",
    "tasks": [
        {
            "label": "Build hello world",
            "type": "shell",
            "command": "g++",
            "args": [
                "-g", "helloworld.cpp"
            ],
            "group": {
                "kind": "build",
                "isDefault": true,
            }
        }
    ]
}

Указанный выше файл tasks.json предлагается в последней документации vscode (см. https://code.visualstudio.com/docs/languages/cpp), нона самом деле не работает. По какой-то причине похоже, что последняя команда, введенная vscode для терминала, неверна. Это должно выглядеть как "bash -c g ++ ...". Было бы действительно полезно, если бы эта команда могла бытьповторил где-то, чтобы ошибка была очевидна.

Проблема решена, если оболочка по умолчанию настроена на сохранение командной строки Windows, а файл tasks.json изменен, чтобы получить полный контроль над способом сборки терминала.Команда формируется через поле «options» следующим образом:

{
    // See https://go.microsoft.com/fwlink/?LinkId=733558
    // for the documentation about the tasks.json format
    "version": "2.0.0",
    "tasks": [
        {
            "label": "Build hello world",
            "type": "shell",
            "command": "",
            "args": [
                "g++", "-g", "helloworld.cpp"
            ],
            "problemMatcher":"$gcc",
            "group": {
                "kind": "build",
                "isDefault": true,
            },
            "options": {
                "shell": {
                    "executable": "C:\\WINDOWS\\System3\\bash.exe",
                    "args":["-c"]
                }
            }
        }
    ]
}

В приведенном выше рабочем файле tasks.json используется options, описанные в https://code.visualstudio.com/docs/editor/tasks. Обратите внимание, что я добавил опцию «problemMatcher».Это не имеет никакого отношения к проблеме, описанной здесь, но становится удобным для анализа вывода gcc и обнаружения ошибок в исходном коде.

Итак, в вашем случае вам необходимо:

  1. Установите для терминала по умолчанию vscode значение Командная строка

  2. Добавьте в файл tasks.json параметр:

        "options": {
            "shell": {
                "executable": "C:\\WINDOWS\\System3\\bash.exe",
                "args":["-c"]
            }
    

В сочетании с вашим исходным файлом tasks.json приведенное выше должно привести к тому, что в рабочей папке WSL будет правильно сформирована команда make.

...