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个任务,如下:
cmake

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”,运行的就是第二个任务

cmake

以下列出完整的 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来管理构建,稍后介绍!