VSCode多根工作区:如何获取.code-workspace路径配置默认包含路径?
解决VSCode多根工作区cpptools相对路径配置问题
在多根工作区场景下,确实没有直接指向.code-workspace文件所在路径的内置环境变量,但我们可以通过两种可靠的方式实现你要的可移植性配置:
方法1:将工作区根目录添加为工作区文件夹(推荐)
这是最直观且可靠的方案,核心思路是把.code-workspace所在的目录本身添加为一个命名的工作区文件夹,之后通过命名变量精准指向它。
步骤:
- 修改你的
.code-workspace文件,在folders数组中添加根目录(路径设为.,并给它一个明确的名称,比如workspace-root):
"folders": [ { "path": ".", "name": "workspace-root" }, { "path": "src" // 你的C项目源码文件夹 }, { "path": "libs/libA" // 外部库A }, { "path": "libs/libB" // 外部库B } ]
- 在同一个
.code-workspace的settings中,使用${workspaceFolder:workspace-root}来配置cpptools的包含路径:
"settings": { "C_Cpp.default.includePath": [ "${workspaceFolder:workspace-root}/src/include", "${workspaceFolder:workspace-root}/libs/libA/include", "${workspaceFolder:workspace-root}/libs/libB/include" ], // 其他cpptools配置,比如编译器路径、标准版本等 "C_Cpp.default.compilerPath": "gcc", "C_Cpp.default.cStandard": "c17" }
这个变量会始终解析为.code-workspace所在的根目录,完全不受当前打开文件的位置影响。
如果不想在侧边栏显示根目录的文件,可以添加files.exclude配置隐藏无关内容:
"settings": { "files.exclude": { "**/.git": true, "**/.vscode": true, // 根据你的需求添加其他要隐藏的项 } }
方法2:自定义配置变量复用路径
如果你不想添加根目录为工作区文件夹,也可以先定义一个自定义配置变量,再在include路径中引用它:
- 在
.code-workspace的settings中先定义根路径变量:
"settings": { "project.workspaceRoot": "${workspaceFolder}/../", // 这里的${workspaceFolder}假设所有子工作区文件夹都直接在根目录下,所以用../回到根目录 }
- 接着在include路径中通过
${config:变量名}引用:
"settings": { "project.workspaceRoot": "${workspaceFolder}/../", "C_Cpp.default.includePath": [ "${config:project.workspaceRoot}/src/include", "${config:project.workspaceRoot}/libs/libA/include" ] }
不过这个方法依赖于子工作区文件夹的层级结构,不如方法1灵活可靠。
最后要注意:所有cpptools的配置一定要放在.code-workspace的settings区块中,而不是单个工作区文件夹下的c_cpp_properties.json,这样才能保证是工作区级别的全局配置。
内容的提问来源于stack exchange,提问作者psullivan
相关产品推荐
相关产品推荐

