说明
vscode在打开工程的时候,若该工程下存在多个目录文件夹,系统自动配置的索引目录可能会存在问题,例如在某个文件夹下的main.c文件中调用了另一个文件夹下的.c文件中的某函数,此时对该函数进行转到定义跳转会显示“未找到xxx的任何定义”。
解决方法
用系统资源管理器打开该工程文件目录下的.vscode文件夹的 c_cpp_properties.json 文件(仅以C语言为例),文件内容如下所示:
{
"configurations": [
{
"name": "Win32",
"includePath": [
"${workspaceFolder}/**"
],
"defines": [
"_DEBUG",
"UNICODE",
"_UNICODE"
]
}
],
"version": 4
}
可以看到"${workspaceFolder}/**"已经表示工作区下的所有文件,但是跳转还是存在问题,此时我们需要手动添加索引:
假设需要添加的目录为modbus,如果 modbus 目录位于工作区根目录下,在该文件中插入索引 ${workspaceFolder}/modbus。
如果 modbus 在工作区的某个子目录中,确保路径反映了其实际位置。
修改后的代码:
{
"configurations": [
{
"name": "Win32",
"includePath": [
"${workspaceFolder}/**",
"${workspaceFolder}/modbus"
],
"defines": [
"_DEBUG",
"UNICODE",
"_UNICODE"
]
}
],
"version": 4
}
修改完毕后保存该文件,即可看到相关目录文件已经重新索引,函数亦可正常跳转。
屏蔽目录
若工程下存在例如编译中间件等不需要vscode索引的目录,可以在.vscode文件夹下的settings.json中添加下述代码屏蔽该目录
其中ture表示屏蔽,false表示不屏蔽。
"search.exclude": {
"目录名称": true
},
"files.exclude": {
"目录名称": true
}
例如:
原始文件内容为:
{
"files.associations": {
"DataScope_DP.C": "cpp",
"modbus.h": "c",
"main.h": "c"
}
}
现在要屏蔽中间件文件夹MDK-ARM,添加屏蔽代码后内容为:
{
"files.associations": {
"DataScope_DP.C": "cpp",
"modbus.h": "c",
"main.h": "c"
},
"search.exclude": {
"MDK-ARM": true
},
"files.exclude": {
"MDK-ARM": true
}
}
此时打开vscode工作区目录,可以看到对应的文件夹已经被屏蔽,使用全局搜索也不会再搜索到相关内容。