如何在Visual Studio代码中构建和运行C++代码?

Arn*_*tte 3 c++ visual-studio-code

我有一个task.json脚本,目前编译代码

{
    "version": "0.1.0",
    "command": "gcc",
    "isShellCommand": true,
    "args": ["-Wall", "${relativeFile}", "-o", "${relativeFile}.exe", "-pedantic"],
    "echoCommand": true,
    "showOutput": "always",
    "problemMatcher": {
        "owner": "cpp",
        "fileLocation": ["relative", "${workspaceRoot}"],
        "pattern": {
            "regexp": "^(.*):(\\d+):(\\d+):\\s+(warning|error):\\s+(.*)$",
            "file": 1,
            "line": 2,
            "column": 3,
            "severity": 4,
            "message": 5
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这工作正常,但是当我想运行该文件时,我必须从命令行运行exe.是否有可能在任务中执行此操作?那么,如果它成功完成构建,那么它会运行不同的任务吗?

Chr*_*ris 12

如果其他人像我一样在搜索时遇到这个问题,您现在可以将preLaunchTask您的属性设置launch.json为您的构建任务的name属性,它会在您启动之前运行。

例如

"name": "Debug (gdb) Launch", "preLaunchTask": "Build All",

"name": "Builld All"在您tasks.json启动程序之前运行。

您可以在 Visual Code文档页面中的调试中阅读有关此内容的信息。


Bry*_*eld 8

您可以在Visual Studio Code中配置多个任务,其中一个任务允许您构建可执行文件,另一个将运行您的可执行文件.

或者,您也可以查看Visual Studio Code的"运行模式"(参见此处).如果使用"运行模式",则应该能够配置Visual Studio代码以构建可执行文件,然后启动它.

我对"运行模式"并不是非常熟悉,因此我将详细介绍如何定义多个任务以实现类似的结果.


免责声明:Visual Studio Code不支持使用不同shell命令的任务(请参阅此处).

那就对了.在当前状态下,Visual Studio Code没有"本机"支持来定义使用不同shell命令的任务.

免责声明:Visual Studio Code的任务输出窗格不允许您以交互方式将输入传递给您的程序.

如果您的程序依赖于用户输入(例如,来自stdin),那么最好不要使用Visual Studio Code 来运行可执行文件.


基本上,我们需要做的是定义两个任务,其中一个将是构建任务,另一个将是我们的启动任务.

看作Visual Studio Code没有很好的支持来定义每个使用不同shell命令的多个任务,我们需要将我们tasks.json"command"属性更改为cmd(或者sh,如果在Linux/macOS上).我们还需要将"args"属性设置为[/C]([-c]如果在Linux/macOS上).

我们这样做的原因是因为我们希望我们要定义的每个任务都作为参数传递给新的shell实例.

下一步是定义构建和启动任务.当我们这样做时,我们需要确保将我们想要运行的命令作为任务参数.例如:

{
    "taskName": "build",
    "args": ["gcc", "-Wall", "${relativeFile}", "-o", "${relativeFile}.exe", "-pedantic"]
}
Run Code Online (Sandbox Code Playgroud)

最后,我们要做的是将"isBuildCommand"属性添加到我们的构建任务(并确保它true),以及将"isTestCommand"属性添加到我们的启动任务(并再次确保它true).

毕竟,我们的tasks.json文件看起来像这样:

{
    "version": "0.1.0",
    "command": "cmd",
    "args": ["/C"],
    "isShellCommand": true,
    "showOutput": "always",
    "suppressTaskName": true,
    "tasks": [
        {
            "taskName": "build",
            "args": ["gcc", "-Wall", "${relativeFile}", "-o", "${relativeFile}.exe", "-pedantic"],
            "isBuildCommand": true
        },
        {
            "taskName": "run",
            "args": ["${relativeFile}.exe"],
            "isTestCommand": true
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

注意:如果将每个任务参数放在args数组中自己的字符串中不起作用,您还可以尝试将所有参数放在args数组中的单个字符串中.例:

["gcc -Wall ${relativeFile} -o ${relativeFile}.exe -pedantic"]
Run Code Online (Sandbox Code Playgroud)

注意:如果你希望能够通过键盘快捷键来调用你的任务(一个或多个),你有"workbench.action.tasks.build""workbench.action.tasks.test"在您的处置编辑命令.

如果你需要一个绑定这些命令的键的例子,这里有一个如何在我的keybindings.json文件中映射它们的例子:

[
    {
        "key": "f6",
        "command": "workbench.action.tasks.build"
    },
    {
        "key": "f7",
        "command": "workbench.action.tasks.test"
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑:您可能只需要为测试任务定义键盘快捷键,因为构建任务可能已经定义了一个.在花时间定义不同的键盘快捷键之前,请先检查此处.