如何在Visual Studio code中构建和运行c++代码

How to build and run C++ code in Visual Studio Code?

本文关键字:构建 运行 c++ 代码 code Visual Studio      更新时间:2023-10-16

我有一个任务。当前编译代码的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
        }
    }
}

这工作得很好,但是当我想要运行文件时,我必须从命令行运行exe。在任务中也可以这样做吗?所以如果它成功地完成了构建,它就会运行一个不同的任务?

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

例如

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

将在启动程序之前运行tasks.json中的"name": "Builld All"

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

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

你也可以选择查看Visual Studio Code的"运行模式"(见这里)。如果你使用"运行模式",你应该能够配置Visual Studio Code来构建你的可执行文件,然后启动它。

我不是很熟悉"运行模式",因此我将详细说明如何定义多个任务来实现类似的结果。


免责声明: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](如果在Linux/macOS上是[-c])。

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

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

{
    "taskName": "build",
    "args": ["gcc", "-Wall", "${relativeFile}", "-o", "${relativeFile}.exe", "-pedantic"]
}

最后,我们要做的是将"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
        }
    ]
}

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

["gcc -Wall ${relativeFile} -o ${relativeFile}.exe -pedantic"]

:如果您希望能够通过键盘快捷键调用您的任务,您可以使用"workbench.action.tasks.build""workbench.action.tasks.test"编辑器命令。

如果您需要一个将键绑定到这些命令的示例,下面是我如何将它们映射到我的keybindings.json文件中的示例:

[
    {
        "key": "f6",
        "command": "workbench.action.tasks.build"
    },
    {
        "key": "f7",
        "command": "workbench.action.tasks.test"
    }
}

Edit:您可能只需要为测试任务定义一个键盘快捷方式,因为构建任务可能已经定义了一个快捷方式。在您花时间定义不同的键盘快捷方式之前,请检查这里。

您可以创建一个用于构建的任务,并且作为它的参数可以传递用于运行的命令。作为一个例子,我用来编译和运行c++的任务如下所示:

{
"version": "2.0.0",
"tasks": [
    {
        "label": "g++ build and run",
        "type": "shell",
        "command": "g++",
        "args": [
            "-g",
            "-o",
            "out.exe",
            ""${file}"",
            "&&",
            "./out.exe",
            "<",
            "input.in",
            ">",
            "output.out"
        ],
        "group": {
            "kind": "build",
            "isDefault": true
        }
    }
]
}

在上面的任务中,我将我的源文件(文件的名称可以是任何人在这里使用${file})编译为out.exe和运行out.exe,同时从input.in获取输入并输出输出到output.out