如何在vscode工作区文件夹之间共享任务?

时间:2018-07-30 18:57:55

标签: build visual-studio-code dependencies task chain

我的VSCode项目是多根工作区。那就是我有多个工作区,每个工作区在单独的目录中,每个工作区都有一个.vscode文件夹。

我正在尝试通过构建任务构建一个在每个模块之间具有依赖关系的工作区。

我尝试为任务设置dependsOn参数,但是会产生以下错误:

Couldn't resolve dependent task 'build FOO' in workspace folder 'BAR' (此处BAR的构建任务取决于FOO)

是否有更好/正确/任何方法可以实现我的目标?

2 个答案:

答案 0 :(得分:0)

您可以在tasks文件中包含.code-workspace部分。在这里,您可以创建“全部构建”之类的任务,并定义dependsOn个任务。但是,在那里您也无法从工作空间文件夹中引用构建任务(对我来说,这听起来像是一项合理的功能,我相信他们应该在某个时候实现它)。 我的解决方法是将相关的构建任务从子任务文件复制到.code-workspace文件中,并在我的“全部构建”任务中引用它们。

示例.code-workspace

{
    "folders": [
        {
            "path": "proj-A"
        },
        {
            "path": "proj-B"
        }
    ],
    "tasks": {
        "version": "2.0.0",
        "tasks": [
            {
                "type": "shell",
                "label": "Build A",
                "command": "make",
                "args": ["-j4"],
                "options": {
                    "cwd": "${workspaceFolder}/../proj-A",
                },
                "problemMatcher": [
                    "$gcc"
                ],
                "group": "build",
            },
            {
                "type": "shell",
                "label": "Build B",
                "command": "make",
                "args": ["-j4"],
                "options": {
                    "cwd": "${workspaceFolder}/../proj-B",
                },
                "problemMatcher": [
                    "$gcc"
                ],
                "group": "build",
            },
            {
                "type": "shell",
                "label": "Build all",
                "command": "echo",
                "args": ["Building everything"],
                "options": {},
                "problemMatcher": [
                    "$gcc"
                ],
                "group": {
                    "kind": "build",
                    "isDefault": true
                },
                "dependsOrder":"sequence",
                "dependsOn": ["Build A", "Build B"]
            },
        ]
    }
}

请注意各个构建任务中的cwd选项。 ${workspaceFolder}似乎设置为"folders"部分中的第一条路径。您还可以将cwd设置为绝对路径。

这有点麻烦,而且必须复制构建任务的事实并不漂亮,但是它现在可以使用,并且一旦可以引用子任务文件的任务,就可以轻松进行调整。

答案 1 :(得分:0)

检查新的VSCode 1.42 User level Tasks是否可以帮助共享任务。

现在在用户设置级别支持

tasks.json

您可以运行Tasks: Open User Tasks命令来创建用户级任务。
这些任务将在所有文件夹和工作空间中可用
这里仅支持外壳程序和进程任务类型。