Как заставить Visual Studio выполнять команды сборки в оболочке msys2? - PullRequest
0 голосов
/ 01 мая 2020

Мне удалось построить и отладить мой проект C ++ (mingw) с помощью кода Visual Studio. Я хочу быть в состоянии сделать это с Visual Studio 2019 (как обсуждено здесь ). Для этого, похоже, мне нужно запустить команды сборки в другой оболочке. Это конфиг, который я использую для VS Code:

в .vscode/settings.json:

{
    "terminal.integrated.shell.windows": "C:\\tools\\msys64\\usr\\bin\\bash.exe",
    "terminal.integrated.shellArgs.windows": [
        "--login",
        "-i"
    ],
    "terminal.integrated.env.windows": {
        "MSYSTEM": "MINGW64",
        "CHERE_INVOKING":"1"
    }
}

в .vscode/tasks.json:

{
    "version": "2.0.0",
    "tasks": [
        {
            "type": "shell",
            "label": "build",
            "command": "sh",
            "args": [
                "build.sh"
            ],
            "options": {
                "cwd": "${workspaceFolder}"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            }
        }
    ]
}

Это работает очень хорошо , Мой сценарий build.sh выполняет различные команды для компиляции моего проекта.

Но я хочу иметь возможность разрабатывать свой проект в Visual Studio 2019 (не в коде Visual Studio), поскольку VS Code все еще не хватает в паре «Обязательные» возможности разработки на C ++.

Но моя проблема в том, что я не понимаю, как заставить Visual Studio выполнять команды сборки в другой оболочке, как это делает VS Code . Таким образом, команды сборки не работают, так как они не выполняются в среде msys2, mingw64.

Это мой файл .vs/tasks.vs.json:

{
  "version": "0.2.1",
  "tasks": [
    {
      "taskLabel": "build",
      "appliesTo": "/",
      "type": "launch",
      "command": "sh",
      "args": ["build.sh"],
      "env": "Mingw64",
      "customLaunchCommand": "C:\\tools\\msys64\\usr\\bin\\bash.exe",
      "customLaunchCommandArgs": [
        "--login",
        "-i"
      ]
    }
  ]
}

Этот файл конфигурации был моим лучшим Спорим, как заставить команду sh build.sh выполняться в командной оболочке, открытой командой C:\tools\msys64\usr\bin\bash.exe --login -i.

Может кто-нибудь сказать мне, как заставить Visual Studio 2019 выполнять команды сборки в оболочке msys2, например VS Код делает?

РЕДАКТИРОВАТЬ :

Так что, возможно, я все ближе с этим, а может и нет. Следуя примерам в документах Visual Studio 2019, мой .vs/CppProperties.json теперь выглядит следующим образом:

{
  "configurations": [
    {
      "inheritEnvironments": [
        "mingw_64"
      ],
      "name": "Mingw64",
      "includePath": [
        "${workspaceRoot}\\**"
      ],
      "intelliSenseMode": "linux-gcc-x64",
      "environments": [
        {
          "MINGW_PREFIX": "C:\\tools\\msys64",
          "MINGW_CHOST ": "x86_64-w64-mingw32",
          "MINGW_PACKAGE_PREFIX": "mingw-w64-x86_64",
          "MSYSTEM": "MINGW64",
          "MSYSTEM_CARCH": "x64_64",
          "MSYSTEM_PREFIX": "${env.MINGW_PREFIX}",
          "SHELL": "${env.MINGW_PREFIX}\\usr\\bin\\bash.exe --login -i",
          "TEMP": "${env.MINGW_PREFIX}/../tmp",
          "TMP": "${env.TEMP}"
        }
      ]
    }
  ]
}

И мой .vs/tasks.vs.json:

{
  "version": "0.2.1",
  "tasks": [
    {
      "taskLabel": "build",
      "appliesTo": "build.sh",
      "contextType": "build",
      "type": "default",
      "command": "sh",
      "args": [
        "build.sh"
      ],
      "inheritEnvironments": [ "Mingw64" ]
    }
  ]
}

Но, тем не менее, кажется, Visual Studio по-прежнему не использует оболочку msys2 для выполнения задачи сборки. Как на самом деле использовать «конфигурацию», определенную в файле CppProperties.json, для меня загадка ...

1 Ответ

0 голосов
/ 02 мая 2020

Это один из способов сделать это:

// .vs/tasks.vs.json
{
  "version": "0.2.1",
  "tasks": [
    {
      "taskLabel": "build",
      "appliesTo": "build.sh",
      "contextType": "build",
      "type": "launch",
      "command": "bash.exe",
      "args": [
        "--login",
        "-c",
        "\"sh build.sh\""
      ],
      "env": {
        "PATH": "C:\\tools\\msys64\\usr\\bin",
        "CHERE_INVOKING": "1",
        "MSYSTEM": "MINGW64"
      }
    }
  ]
}

...