前言:介绍 task.json 和 launch.json 文件
task.json 和 launch.json 是用于配置 VS Code 编辑器中的任务 和 调试功能的两个重要文件。
task.json 文件用于配置任务,它定义了执行特定操作的任务,并提供了相应的命令和参数。以下是 task.json 的一些常见配置属性:
“tasks”:包含了一个或多个任务配置,每个配置定义了一个特定的任务。
“label”:指定了任务的名称,用于在 VS Code 中显示。
“command”:指定了要执行的命令或可执行文件的路径。
“args”:指定了传递给命令或可执行文件的参数。
“options”:指定了任务运行时的选项,如工作目录、环境变量等。
“problemMatcher”:指定了问题匹配器,用于捕获任务输出中的错误和警告信息。
其他任务特定的属性,如 “isBackground”(指定任务是否在后台运行)等。
launch.json 文件用于配置调试器,它定义了调试会话的启动方式以及各种调试选项。以下是 launch.json 的一些常见配置属性:
“configurations”:包含了一个或多个调试配置,每个配置定义了一个特定的调试方案。
“type”:指定了要使用的调试器类型,如 C++、Python、Node.js 等。
“request”:指定了调试器的请求类型,例如 “launch”、“attach” 等。
“program”:指定了要调试的程序的入口点路径。
“args”:指定了传递给被调试程序的命令行参数。
“env”:指定了环境变量,用于设置调试过程中的环境。
其他调试器特定的属性,如 “preLaunchTask”(指定在调试之前执行的任务)、“sourceFileMap”(指定源代码与实际文件路径之间的映射关系)等。
总结起来,task.json 用于配置任务,以便在编辑器中执行自定义的操作。launch.json 用于配置调试器,以便在编辑器中进行程序调试。它们的作用是提供了一种简便的方式来定义和管理调试和任务相关的设置,使得开发者可以更高效地进行调试和任务操作。
1、项目结构(分目录+多文件形式)
${workspaceFolder} :表示当前workspace文件夹路径
${workspaceRootFolderName}:表示workspace的文件夹名
${file}:文件自身的绝对路径
${relativeFile}:文件在workspace中的路径
${fileBasenameNoExtension}:当前文件的文件名,不带后缀
${fileBasename}:当前文件的文件名
${fileDirname}:文件所在的文件夹路径
${fileExtname}:当前文件的后缀
${lineNumber}:当前文件光标所在的行号
${env:PATH}:系统中的环境变量
2、task.json文件
2.1 修改前
{
"tasks": [
{
"type": "cppbuild",
"label": "C/C++: g++.exe 生成活动文件",
"command": "D:\\App\\Microsoft VS Code\\mingw64\\bin\\g++.exe",
"args": [
"-fdiagnostics-color=always",
"-g",
"${file}",
"-o",
"${fileDirname}\\${fileBasenameNoExtension}.exe"
],
"options": {
"cwd": "${fileDirname}"
},
"problemMatcher": [
"$gcc"
],
"group": "build",
"detail": "调试器生成的任务。"
},
{
"type": "cppbuild",
"label": "C/C++: g++.exe 生成活动文件 ver(1)",
"command": "D:\\App\\Microsoft VS Code\\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": "调试器生成的任务。"
}
],
"version": "2.0.0"
}
2.2 修改后
{
"tasks": [
{
"type": "cppbuild",
"label": "C/C++: g++.exe 生成活动文件", //需要确保 tasks.json 的 label 属性 与 launch.json 的 preLaunchTask 属性 完全相同
"command": "D:\\App\\Microsoft VS Code\\mingw64\\bin\\g++.exe",
"args": [
"-fdiagnostics-color=always",
// "-g",
// "${fileDirname}/*.cpp",
"-g", //-g:生成调试信息,便于在编译后进行程序调试。
"${workspaceFolder}/src/*.cpp", // "${workspaceFolder}/src/*.cpp":指定了要编译的源代码文件的路径。${workspaceFolder} 表示项目根目录的路径,/src/*.cpp 表示在 src 目录下的所有 .cpp 文件。
//增加
"-I", //-I:指定了头文件搜索路径。
"${workspaceFolder}/inc", // 表示头文件所在的目录路径。${workspaceFolder} 表示项目根目录的路径,/inc 表示在项目根目录下的 inc 目录。
// "-o",
// "${fileDirname}\\${fileBasenameNoExtension}.exe"
"-o", //-o:指定输出文件的路径和名称。
"${workspaceFolder}/out/${fileBasenameNoExtension}.exe" //表示输出文件的路径和名称。${workspaceFolder} 表示项目根目录的路径,/out/ 表示在项目根目录下的 out 目录,${fileBasenameNoExtension} 表示当前被编译的源代码文件的基本名称(不包括扩展名),.exe 表示生成的可执行文件的扩展名。
],
"options": {
"cwd": "${fileDirname}"
},
"problemMatcher": [
"$gcc"
],
"group": {
"kind": "build",
"isDefault": true
},
"detail": "调试器生成的任务。"
}
],
"version": "2.0.0"
}
3、launch.json文件
3.1 修改前
{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "g++.exe - 生成和调试活动文件",
"type": "cppdbg",
"request": "launch",
"program": "${fileDirname}\\${fileBasenameNoExtension}.exe",
"args": [],
"stopAtEntry": false,
"cwd": "${fileDirname}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"miDebuggerPath": "D:\\App\\Microsoft VS Code\\mingw64\\bin\\gdb.exe",
"setupCommands": [
{
"description": "为 gdb 启用整齐打印",
"text": "-enable-pretty-printing",
"ignoreFailures": true
},
{
"description": "将反汇编风格设置为 Intel",
"text": "-gdb-set disassembly-flavor intel",
"ignoreFailures": true
}
],
"preLaunchTask": "C/C++: g++.exe 生成活动文件"
}
]
}
3.2 修改后
{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "g++.exe - 生成和调试活动文件",
"type": "cppdbg",
"request": "launch",
//"program": "${fileDirname}\\${fileBasenameNoExtension}.exe",
//修改为:
"program": "${workspaceFolder}\\out\\${fileBasenameNoExtension}.exe", //这里
"args": [],
"stopAtEntry": false,
//"cwd": "${fileDirname}", //"cwd" 是表示工作目录(current working directory)的缩写。"cwd": "${fileDirname}" 表示将当前文件所在的目录作为工作目录。
//修改为:
"cwd": "${workspaceFolder}\\out", //"cwd": "${workspaceFolder}\out" 表示将工作目录设置为当前工作区的根目录下的 "out" 文件夹
"environment": [],
"externalConsole": true,
"MIMode": "gdb",
"miDebuggerPath": "D:\\App\\Microsoft VS Code\\mingw64\\bin\\gdb.exe",
"setupCommands": [
{
"description": "为 gdb 启用整齐打印",
"text": "-enable-pretty-printing",
"ignoreFailures": true
},
{
"description": "将反汇编风格设置为 Intel",
"text": "-gdb-set disassembly-flavor intel",
"ignoreFailures": true
}
],
"preLaunchTask": "C/C++: g++.exe 生成活动文件" //tasks.json --> label == launch.json --> preLaunchTask
}
]
}
4、实现示例
VSCode C/C++ 分目录+多文件编译配置2