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

新手上路,请多包涵

我有一个 tasks.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。是否也可以在任务中执行此操作?因此,如果它成功完成构建,它会运行不同的任务吗?

原文由 Arn Vanhoutte 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 816
2 个回答

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

或者,您还可以查看 Visual Studio Code 的“运行模式”(参见 此处)。如果您使用“运行模式”,您应该能够配置 Visual Studio Code 来构建您的可执行文件,然后启动它。

我对“运行模式”不是很熟悉,因此我将详细介绍如何定义多个任务以实现类似的结果。


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

这是正确的。在当前状态下,Visual Studio Code 没有“本机”支持来定义使用不同 shell 命令的任务。

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

如果您的程序依赖于用户输入(例如,来自标准输入),您最好不要使用 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"]
}

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

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

原文由 Brynden 发布,翻译遵循 CC BY-SA 3.0 许可协议

如果其他人在像我一样进行搜索时遇到此问题,您现在可以将 preLaunchTask launch.json 为构建任务的 name 属性,它将运行在你发射之前。

例如

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

在启动程序之前,将在您的 tasks.json "name": "Builld All"

您可以在 Debugging in Visual Code 文档页面上阅读相关信息。

原文由 Chris 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题