0

更广泛的问题:

这篇文章最初询问了如何指定特定于平台的问题匹配器,但似乎要回答的更重要的问题是:

当“windows”或“linux”部分无法识别这些属性时,如何为任务设置特定于平台的属性?

即使我将这个任务分成两个任务,似乎只能将其中一个设置为两个平台的默认构建任务。

在有人问之前,这个问题源于需要将我的 tasks.json 文件提交到存储库,以便其他开发人员能够使用 VS Code 中的“运行构建任务...”命令在任何平台上构建项目。我意识到他们总是可以在检查代码后更改默认任务。

原始问题:

我在 VSCode 中有一个任务,它运行一个 shell/批处理脚本来构建我的 C++ (CMake) 应用程序。该任务将"windows""linux"键用于特定于平台的命令。

{
  "label": "Build x64",
  "type": "shell",
  "windows": { "command": "${workspaceRoot}/Build-Win-x64.bat" },
  "linux": { "command": "${workspaceRoot}/Build-Linux-x64.sh" },
  "group": { "kind": "build", "isDefault": true }
}

Windows 脚本使用 MSVC 编译器构建,这需要放入"problemMatcher": "$msCompile"任务,以便 VSCode 可以解析编译器输出。

然而,Linux 脚本使用 GCC,它需要"problemMatcher": "$gcc".

这些值似乎是互斥的,VSCode 不允许它们在特定于平台的属性中。

有没有办法为每个平台设置具有不同问题匹配器的默认构建任务?

我曾考虑过使用这样的环境变量,"problemMatcher": "${env:VSCODE_CPP_MATCHER}"但是为每个与该项目一起工作的工作站进行设置会很烦人。

4

1 回答 1

1

事实证明,您可以使用一系列问题匹配器!

{
    "label": "Build",
    "windows": { "command": "${workspaceFolder}/Build-Win-x64.bat" },
    "linux": { "command": "${workspaceFolder}/Build-Linux-x64.sh" },
    "problemMatcher": ["$msCompile", "$gcc"]
}

由于此解决方案允许我对 Windows 和 Linux 使用相同的任务,因此我不需要为每个平台定义单独的默认构建任务。

只是出于好奇,是否可以为每个平台设置不同的默认构建任务?

于 2019-05-17T17:36:38.383 回答