VS Code 工作区的三个文件分别服务于代码理解、任务执行和调试启动。它们可以互相引用,但不能互相替代。
| 文件 | 负责什么 | 不负责什么 |
|---|---|---|
.vscode/c_cpp_properties.json | C/C++ 扩展的 IntelliSense、头文件搜索、宏和编译器识别 | 实际编译命令 |
.vscode/tasks.json | 执行构建、测试、格式化等外部命令 | 调试器连接参数 |
.vscode/launch.json | 启动或附加调试器、传参、环境变量和断点行为 | 定义项目构建系统 |
这些文件通常是 JSON with Comments(JSONC),允许注释和部分编辑器扩展语法,不应假定普通 JSON 解析器可以直接读取。
c_cpp_properties.json
跳转到“c_cpp_properties.json”{ "configurations": [ { "name": "Win32", "compilerPath": "C:/msys64/ucrt64/bin/g++.exe", "includePath": ["${workspaceFolder}/include"], "defines": ["DEBUG"], "cppStandard": "c++20", "intelliSenseMode": "windows-gcc-x64" } ], "version": 4}includePath 只影响 IntelliSense。若真实构建仍报告找不到头文件,应修改 CMake、Makefile 或编译命令,而不是只改这里。能生成 compile_commands.json 的构建系统,优先让扩展读取该文件,减少两套配置漂移。
tasks.json
跳转到“tasks.json”{ "version": "2.0.0", "tasks": [ { "label": "build", "type": "process", "command": "cmake", "args": ["--build", "${workspaceFolder}/build"], "group": { "kind": "build", "isDefault": true }, "problemMatcher": "$gcc" } ]}process 直接启动程序,参数边界清楚;只有确实需要管道、重定向或 shell 内建命令时才使用 shell。problemMatcher 把编译器输出转换为编辑器问题列表。
launch.json
跳转到“launch.json”{ "version": "0.2.0", "configurations": [ { "name": "Debug application", "type": "cppdbg", "request": "launch", "program": "${workspaceFolder}/build/app.exe", "cwd": "${workspaceFolder}", "args": [], "preLaunchTask": "build" } ]}preLaunchTask 必须与 tasks.json 中的 label 完全一致。调试失败时按顺序检查:构建任务是否成功、program 是否指向最新可执行文件、调试扩展的 type 是否正确、工作目录和环境变量是否符合程序预期。
配置原则
跳转到“配置原则”- 让 CMake、Make 或其他构建系统成为编译选项的唯一事实来源。
- 把可重复命令放入任务,把调试器参数放入启动配置。
- 使用
${workspaceFolder}等变量,避免提交个人绝对路径。 - 只提交团队可复用的配置;个人机器路径放入不跟踪的本地设置。
来源:CSDN 原文,首次发布于 2024-08-18。