我有一个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
}
}
}
这很好用,但是当我想运行文件时,我必须从命令行运行exe。是否有可能在任务中执行此操作?那么,如果它成功完成构建,那么它会运行一个不同的任务吗?
答案 0 :(得分:7)
您可以在Visual Studio Code中配置多个任务,其中一个任务允许您构建可执行文件,另一个将运行您的可执行文件。
或者,您也可以查看Visual Studio Code"运行模式" (见here)。如果您使用"运行模式",您应该能够配置Visual Studio代码来构建可执行文件,然后启动它。
我不太熟悉"运行模式",因此我将详细说明如何定义多个任务以获得类似的结果。
那是对的。在目前的状态下,Visual Studio Code没有" native"支持定义使用不同shell命令的任务。
如果您的程序依赖于用户输入(例如,来自stdin),那么最好不要使用Visual Studio代码来运行可执行文件。
基本上,我们需要做的是定义两个任务,其中一个将是构建任务,另一个将是我们的启动任务。
看作Visual Studio Code并不能很好地支持定义每个使用不同shell命令的多个任务,我们需要更改tasks.json
{{1} }属性到"command"
(或cmd
,如果在Linux / macOS上)。如果在Linux / macOS上,我们还需要将sh
属性设置为"args"
([/C]
。)
我们这样做的原因是因为我们希望我们要定义的每个任务都作为参数传递给新的shell实例。
下一步是定义我们的构建和启动任务。当我们这样做时,我们需要确保将我们想要运行的命令作为任务参数。例如:
[-c]
最后,我们要做的是将{
"taskName": "build",
"args": ["gcc", "-Wall", "${relativeFile}", "-o", "${relativeFile}.exe", "-pedantic"]
}
属性添加到我们的构建任务中(并确保它"isBuildCommand"
),并添加{{1 }}属性到我们的启动任务(并再次确保它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"]
编辑器命令。
如果你需要一个绑定这些命令的键的例子,这里有一个如何在我的keybindings.json
文件中映射它们的例子:
"workbench.action.tasks.build"
编辑:您可能只需要为测试任务定义键盘快捷键,因为构建任务可能已经定义了一个。在花时间定义不同的键盘快捷键之前,请检查here。
答案 1 :(得分:0)
如果像我一样在搜索时遇到其他问题,您现在可以将preLaunchTask
中的属性launch.json
设置为构建任务的name
属性,它将在启动前运行
例如
"name": "Debug (gdb) Launch",
"preLaunchTask": "Build All",
在启动程序之前,将在"name": "Builld All"
中运行tasks.json
。
您可以在Debugging in Visual Code文档页面上阅读有关此信息。
答案 2 :(得分:0)
您可以创建要构建的任务,并可以将其作为运行参数传递给运行。作为示例,下面显示了我用于编译和运行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
,同时从{ {1}},然后将输出输出到input.in
。