03. VSCode 中任务的概念:task
1. 常用字段说明
tasks.json 文件,用来管理一个或多个任务。目前该文件只有一个默认任务,用于编译出可执行文件HelloWorld.exe。
更多字段说明,参考官方:https://code.visualstudio.com/docs/editor/variables-reference
{
"tasks": [
{
"type": "cppbuild", // 任务类型。cppbuild 是 C/C++ 扩展生成的任务类型,表示这是一个 C/C++ 编译任务(扩展会根据此类型提供默认行为和变量)
"label": "C/C++: g++.exe 生成活动文件", // 任务的用户界面标签(在命令面板/任务列表中显示)
"command": "C:\\msys64\\ucrt64\\bin\\g++.exe", // 要执行的命令。这里是我们之前安装并选择的编译器
"args": [ // 要传递给编译器或编译脚本的参数。
"-fdiagnostics-color=always", // 强制编译器输出带颜色的诊断信息(便于阅读)
"-g", // 生成调试信息,便于调试器使用
"${file}", // 当前打开的文件的完整路径
"-o", // g++ 的输出文件选项(后面接输出路径)
"${fileDirname}\\${fileBasenameNoExtension}.exe" // 输出文件路径:当前文件所在目录 + 当前文件名(无扩展名) + .exe
],
"options": {
"cwd": "${fileDirname}"
},
"problemMatcher": [
"$gcc"
],
"group": {
"kind": "build", // 定义此任务所属的执行组。它支持 "build" 以将其添加到生成组,也支持 "test" 以将其添加到测试组
"isDefault": true // 定义此任务为默认的“构建”任务(按 Ctrl+Shift+B / Run Build Task 时默认执行)
},
"detail": "调试器生成的任务。" // 任务的详细信息。在 UI 中展示更多信息
}
],
"version": "2.0.0"
}
2. 多 task
tasks本身是一个JSON数组,可以添加多个task
以上,第1个任务用于编译出可执行文件HelloWorld.exe,接下来创建第2个任务,用于执行HelloWorld.exe
说明:第2个任务使用
dependsOn指定它依赖第1个任务(先编译后执行),否则如果还没有编译出HelloWorld.exe就执行,就会报错!
{
"label": "C/C++: 运行当前文件",
"detail": "编译器: C:\\msys64\\ucrt64\\bin\\g++.exe",
"type": "shell", // 指定任务类型为 shell,表示 command 会在 shell(例如 PowerShell/CMD/bash)中执行
"command": "${fileDirname}\\${fileBasenameNoExtension}.exe", // 要执行的命令字符串,两个内置变量在前边已介绍过
"dependsOn": "C/C++: 编译当前文件", // 执行该任务时会先运行 [C/C++: 编译当前文件] 这个任务(我把第一个任务改名了),确保可执行文件存在,或者是最新的
"group": "build",
"presentation": { // 用于控制任务在终端/面板中的显示行为
"echo": true, // 在终端中回显所执行的命令(便于调试或确认运行了什么)
"reveal": "always", // 每次运行任务都会自动显示/切换到终端面板。可选值:always / silent / never
"panel": "shared", // 指定使用共享面板(shared),不同任务共享同一个终端面板执行;可选值还有 dedicated、new
},
"problemMatcher": []
}
此时,直接执行第2个任务,会先后执行第1个任务,再执行第2个任务,如下:
3. 默认 task
多个task中,有一个默认的task。
按Ctrl+Shift+B快捷键,或者通过 “Tasks: Run Build Task”,运行的就是默认的task
在前面创建的两个任务中,第1个是默认任务,如果想修改第2个为默认,可以 “Tasks: Configure Default Build Task”,然后选中第2个任务即可
实际上就是修改的
group字段,将第2个任务的isDefault字段修改为了true
修改后,按Ctrl+Shift+B快捷键,或者通过 “Tasks: Run Build Task”,运行的就是第二个任务

以下列出完整的 tasks.json 文件,内容如下:
{
"tasks": [
{
"type": "cppbuild",
"label": "C/C++: 编译当前文件",
"command": "C:\\msys64\\ucrt64\\bin\\g++.exe",
"args": [
"-fdiagnostics-color=always",
"-g",
"${file}",
"-o",
"${fileDirname}\\${fileBasenameNoExtension}.exe"
],
"options": {
"cwd": "${fileDirname}"
},
"problemMatcher": [
"$gcc"
],
"group": "build",
"detail": "调试器生成的任务。"
},
{
"label": "C/C++: 运行当前文件",
"detail": "编译器: C:\\msys64\\ucrt64\\bin\\g++.exe",
"type": "shell",
"command": "${fileDirname}\\${fileBasenameNoExtension}.exe",
"dependsOn": "C/C++: 编译当前文件",
"group": {
"kind": "build",
"isDefault": true
},
"presentation": {
"echo": true,
"reveal": "always",
"panel": "shared"
},
"problemMatcher": []
}
],
"version": "2.0.0"
}
4. 多文件编译
以上介绍,只是编译当前打开的CPP源文件。
对于一个完整的项目,通常包含多个文件夹,多个CPP源文件,此时推荐使用Makefile/CMake来管理构建,稍后介绍!
本文是博主原创文章,转载请注明来源 明王讲QT







