前言
上文介绍了VSCode在Windows环境下如果创建C++项目和编译多个文件项目,但是只是粗略的说明了一下Tasks.json文件。今天对tasks.json进行进一步的了解。
内容
Tasks文件
{
"version": "2.0.0",
"tasks": [
{
"type": "cppbuild",
"label": "C/C++: g++.exe 生成活动文件",
"command": "D:\\mingw\\mingw64\\bin\\g++.exe",
"args": [
"-fdiagnostics-color=always",
"-g",
"${file}",
"-o",
"${fileDirname}\\${fileBasenameNoExtension}.exe"
],
"options": {
"cwd": "${fileDirname}"
},
"problemMatcher": [
"$gcc"
],
"group": {
"kind": "build",
"isDefault": true
},
"detail": "编译器: D:\\mingw\\mingw64\\bin\\g++.exe"
}
]
}
- "version": 版本
- "tasks":任务列表
- "type":任务类型 (cppbulid表示这个任务是关于C++项目构建的)
- "label":任务名称
- "command":指令(这里的值一般是编译器的路径)
- "args": 指令的参数
- "options":用来指定与任务执行相关的选项
- "problemMatcher":是一个预定义的模式名称或一个自定义的 JSON 对象,用于描述如何从命令行输出中提取问题信息
- "group":用于将任务分组到构建和测试的上下文中
- "detail":任务描述
下面对几个重要的属性进一步解释;
tasks属性
tasks在json中是一个数组。数组中的每一个json对象都表示一个任务;比如创建一个构建项目和一个测试项目:
{
"version": "2.0.0",
"tasks": [
{
"label": "debug build",
"command": "g++ -g -o debug_build ${file}",
"type": "shell",
"group": {
"kind": "build",
"isDefault": true
},
"problemMatcher": ["$gcc"]
},
{
"label": "release build",
"command": "g++ -o release_build ${file}",
"type": "shell",
"group": {
"kind": "build",
"isDefault": false
},
"problemMatcher": ["$gcc"]
}
]
}
command属性
command属性指定了要执行的命令。这是任务定义中最基本的部分之一,它告诉 VSCode 要运行什么程序或脚本。
从上面的两段json中可以看到,command可以直接输入编译命令,也可以指定编译器地址,具体编译命令由args属性给出;
同时command属性可以使用变量(vscode中,变量以${varname}的形式存在)、系统环境变量,如果有多命令的需要,还可以执行脚本(liunx的.sh文件和windows的.bat文件);
args属性
用于定义传递给命令的参数。这个属性是一个数组,可以包含一个或多个字符串,每个字符串代表一个命令行参数。args
属性非常有用,因为它允许你通过任务配置来动态地改变命令的行为。
当command属性的值是执行一个脚本时,args可以为脚本传参:
脚本:
@echo off
echo Running with arguments %1, %2, %3
pause
tasks.json文件
{
"version": "2.0.0",
"tasks": [
{
"label": "run script",
"command": "${workspaceFolder}/run.bat",
"args": ["arg1", "arg2", "arg3"],
"type": "shell",
"group": {
"kind": "test",
"isDefault": true
}
}
]
}
options属性
-
env
: 一个对象,用于设置环境变量。例如,你可以设置{"NODE_ENV": "development"}
来为你的任务设置一个开发环境。 -
cwd
: 指定任务执行时的工作目录。这有助于当你的任务需要在一个特定的目录下运行时指定该目录。 -
shell
: 如果设置为true
,则在 shell 环境中执行命令(对于 Windows 可能是 cmd.exe 或 PowerShell)。这对于使用 shell 特性如管道或 shell 扩展等是有用的。 -
windows
: 对于 Windows 平台上的特定选项。它可以包含像shell
这样的选项,或者任何其他针对 Windows 的特殊配置。 -
osx
: 对于 macOS 平台上的特定选项。 -
linux
: 对于 Linux 平台上的特定选项。
group属性
在group属性中有两个子属性,分别是"kind"和"isDefault"。
kind:接受两个值:"build"和"test"。分别表示"这是一个构建任务"和"这是一个测试任务";
isDefault:其值为布尔型,表示某个任务是否应作为其所属组的默认任务;在多个任务场景中,该属性可以最常用的任务为首选项。该属性的值为true,则默认生成,为false,则需要手动选择生成任务;
具体操作:在VSCode界面右上角点击终端,在出现的菜单栏中有两个选项,分别是"运行生成任务"和"运行任务",这两个选项不同点在:前者生成默认任务,后者需要用户选择具体运行哪个任务;如图: