VSCode - 任务能否调用另一个任务?

19

Vscode版本:1.19.3

我想知道是否有办法让一个任务调用另一个任务,就像“preLaunchTask”但适用于普通任务。

原因是当我想调试我的代码时,我需要重新编译我的可执行文件到最新版本,所以我使用“preLaunchTask”调用CMakeTask,然后再调用make来制作我的可执行文件。

3个回答

29

您可以让它依赖于另一个任务。 示例:

    {
        "label": "secondTask",
        "type": "shell",
        "command": "<Your second task's command here>",
        "dependsOn": [
            "firstTask"
        ]
    },
    {
        "label": "firstTask",
        "type": "shell",
        "command": "<Your first task's command here>"
    }

4
这(或Badr Elmers的回答)应该是被接受的答案。我选择你的回答是因为你提供了一个例子。而且,dependsOn 能够指定一系列的任务,这是很酷的一件事情。更酷的是,你也可以使用 dependsOrder 来定义任务是按照顺序还是并行执行。对于C/C++程序员来说非常好用,因为你可以定义一个“build”任务、一个“clean”任务,然后你可以创建一个“rebuild”任务,并告诉它依赖于“clean”和“build”任务。 - user1593842
谢谢@user1593842,我不知道dependsOrder参数,它也很有用。就像你说的那样,我正在使用它进行“maven build”,但在此之前我运行了一个“clean”任务。 - Ali Karaca
你好,你知道是否有一种方法可以使工作区任务依赖于用户任务吗?我找不到任何文档、链接或问题。我只得到了错误信息 在工作区文件夹中无法解析依赖任务 '任务名称' - jaques-sam

15

可以链接任务。在部署任务中使用"dependsOn": ['Build']。 来源


你的答案很好,请更新它并提供一个例子。 - Mohammed Noureldin
不要忘记 "dependsOrder": "sequence",这可能是所需的。 - Andrew

2

总体而言

是的,您可以自动调用其他语言的自定义脚本,但目前还不支持C语言。从任务文档中可以看到:

VS Code当前可自动检测以下系统的任务:Gulp、Grunt、Jake和npm。我们正在与相应的扩展作者合作,以添加对Maven和C# dotnet命令的支持。如果您使用Node.js作为运行时来开发JavaScript应用程序,则通常会有一个package.json文件描述您的依赖项和要运行的脚本。

对于C(或其他自定义)

您需要定义一个自定义任务,就像在构建任务组中一样,以便在那里运行它。

并非所有任务或脚本都可以在工作区中自动检测到。有时需要定义自己的自定义任务。假设您有一个脚本来运行测试,因为需要正确设置一些环境。该脚本存储在工作区内的脚本文件夹中,并命名为test.sh(适用于Linux和macOS)和test.cmd(适用于Windows)。从全局任务菜单中运行“配置任务”。这将打开以下选择器。

只要您的系统识别要使用的二进制文件,并且可以是调用构建步骤的PowerShell、Bash、Batch等脚本,您就可以创建完全任意的命令。这可以是列出其他命令的命令,也可以将多个任意任务添加到此构建组中。

{
    // See https://go.microsoft.com/fwlink/?LinkId=733558
    // for the documentation about the tasks.json format
    "version": "2.0.0",
    "tasks": [
        {
            "label": "Run tests",
            "type": "shell",
            "command": "./scripts/test.sh",
            "windows": {
                "command": ".\\scripts\\test.cmd"
            },
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "presentation": {
                "reveal": "always",
                "panel": "new"
            }
        }
    ]
}

作为默认的构建任务,当触发“运行构建任务”(Ctrl+Shift+B)时,它会直接执行。
任务属性说明:
- 标签(label): 任务在用户界面中使用的标签。 - 类型(type): 任务的类型。对于自定义任务,它可以是"shell"或者"process"。如果指定"shell",则该命令将被解释为shell命令(例如: bash、cmd或PowerShell)。如果指定"process",则该命令将被解释为要执行的进程。如果使用"shell",则任何命令的参数都应嵌入到命令属性中以支持正确的参数引用。例如,如果测试脚本接受一个--debug参数,则命令属性将为:./scripts/test.sh --debug。 - 命令(command): 实际要执行的命令。 - windows: 任何Windows特定属性。当在Windows操作系统上执行命令时,将使用它而不是默认属性。 - 组(group): 定义任务属于哪个组。在这个例子中,它属于test组。属于test组的任务可以通过从命令面板运行"运行测试任务"来执行。 - 显示(presentation): 定义任务输出在用户界面中的处理方式。在这个例子中,终端会显示输出并且每次任务运行时都会创建一个新的终端。

太完美了!我完全忘记了创建自己的shell脚本来处理所有繁琐的工作。这肯定会为我节省很多时间。 - Trevin Corkery

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接