该博客中的原理部分是正确的,但是有更好的解决方式,请参考这篇博客在VS Code中编辑keil代码时无法找到头文件一劳永逸的解决方法,报错:无法打开源文件 “stm32f10x.h“-CSDN博客
在keil中,如果我们是通过Manage Run-Time Environment来导入一些源码的话,这时,头文件不会复制到项目中来,导致VS Code中的c/c++插件无法找到头文件,导致这个报错。解决方法就两步:先找到头文件的位置,然后加到Include Path里即可。
寻找头文件的目录
在keil中,我们可以看到最终生成的编译指令
里面的内容大概长这个样子
--c99 --gnu -c --cpu Cortex-M3 -g -O0 --apcs=interwork --split_sections
-I./RTE/Device/STM32F103RB
-I./RTE/_Target_1
-IC:/Keil_v5/ARM/PACK/ARM/CMSIS/5.6.0/CMSIS/Core/Include
-IC:/Keil_v5/ARM/PACK/Keil/STM32F1xx_DFP/2.3.0/Device/Include
-D__UVISION_VERSION="529" -D_RTE_ -DSTM32F10X_MD
-o .\Objects\*.o --omf_browse .\Objects\*.crf --depend .\Objects\*.d
其中,-I后面的参数就是告诉编译器包含目录Include Path在哪,其中后面跟着./的是相对路径,这里我们不用管他,VS Code能够自己找到这些目录,后面以盘符开头(例如:C:/)的就是绝对路径,我们把它记录下来,这是我们要添加到Include Path中的路径。
将目录添加到VS Code中的Include Path
一般来说,我们在VS Code中使用的Intelli Sence功能(也就是常说的自动补全功能)是由C/C++这个插件提供的,在其配置文件中,有这样的一行:
也就是说,我们可以在c_cpp_properties.json中设置这一项,那么这个文件在哪里呢?其实这种项目级的配置文件一般保存在工作目录的.vscode文件夹中,如图所示
我们修改这个文件中的内容,把刚才的头文件目录添加到IncludePath这个选项后面
完成!