VSCode C++如何将所有指定名称子文件夹加入include路径
VSCode C++环境批量匹配public文件夹为include路径的配置方法
VSCode官方C/C++扩展的配置项原生支持glob通配符匹配,不需要逐个手动添加路径,按以下步骤配置即可:
配置IntelliSense头文件识别(消除编辑器头文件飘红)
这一步是让编辑器的语法提示、跳转功能正确识别public目录下的头文件:
- 按快捷键
Ctrl+Shift+P(macOS系统用Cmd+Shift+P)调出命令面板,搜索执行C/C++: Edit Configurations (JSON),打开工作区下的.vscode/c_cpp_properties.json配置文件 - 在对应配置项的
includePath数组中加入通配规则,示例配置如下:
{ "configurations": [ { "name": "Linux", // 该字段根据你的系统会自动生成,可能为Win32、Mac "includePath": [ "${workspaceFolder}/**/public" ], "defines": [], "compilerPath": "/usr/bin/gcc", "cStandard": "c17", "cppStandard": "c++17", "intelliSenseMode": "linux-gcc-x64" } ], "version": 4 }
规则里的**是glob语法的通用通配符,代表匹配任意层级的子目录,不管public文件夹在二级目录(如FolderA/public)、三级目录(如FolderB/FolderBB/public)还是更深层级,都会被自动纳入包含路径,完全覆盖你需要的匹配效果。
配置实际编译阶段的包含路径
上面的配置只对编辑器的IntelliSense生效,如果要在编译时也自动引入这些public目录,分两种情况处理:
- 如果你用CMake、Meson等构建系统管理项目,直接在构建脚本中编写规则遍历收集所有public目录传入编译参数即可,VSCode会自动从构建系统读取配置,不需要额外重复设置
- 如果你是通过
tasks.json直接调用gcc/clang/msvc编译器,注意编译器本身不识别**这类通配符,可以借助系统自带的路径遍历命令自动生成包含参数:
以Linux/macOS环境为例,tasks.json的编译参数可以这么写:
这段命令会自动遍历工作区下所有名为public的文件夹,自动为每个文件夹添加"args": [ "-g", "${workspaceFolder}/**/*.cpp", "-o", "${workspaceFolder}/output", "$(find ${workspaceFolder} -type d -name public | sed 's/^/-I/')" ]-I前缀作为编译参数传入。Windows环境下可以替换为PowerShell的Get-ChildItem命令实现相同效果。
如果你确认所有public文件夹的层级最深不超过3级,也可以在includePath里写两条固定规则
"${workspaceFolder}/*/public"、"${workspaceFolder}/*/*/public",兼容性更好。
内容的提问来源于stack exchange,提问作者Liu Hao
相关产品推荐
相关产品推荐

