最近在学习esp32,使用VSCODE进行开发。今天在添加自己的项目文件,编译后,系统提示找不到头文件,找了很久,最终在大佬同事的帮助下才解决,这里记录一下。
情况一(在components文件下添加)
先上报错图片。
就只在官方的DEMO文件里添加了另外一层文件,就出现这个问题。只多了一层“drv”文件夹,如果不要drv文件夹,把uart移动到components下后编译也是正常的。所以出问题肯定是因为makefile出了问题,无法链接编译到需要的文件夹。
这里使用两种方法进行解决。
第一种:
修改工程最外层的makefile和cmakelists.txt连个文件。添加如下代码
这几句的意思就是让编译器在编译的时候去这几个文件夹下查找需要的文件。
在project.cmake文件里有对目录的解释
大概意思就是让编译器在这个目录下进行查找。(具体语句我也不是很清楚,惭愧)
添加之后编译就可以通过了。
第二种:
编译器之所以链接不到,是因为编译器只能检测到components文件夹的第一层子目录下,就是drv文件夹,该文件夹的子目录不会去链接,因为没有cmakelists.txt文件。所以第二种方式就是在drv文件夹下创建cmakelists.txt文件.
在该文件夹下添加包含的文件,
这样编译器就能在这里找到drv_uart.c文件了。
PS:如果采用第一种方法,drv下的cmakelists.txt必须删除掉,否则会报错。语句注释掉也不行。
个人建议还是用第一种方法,更正规一点。但是说到底都是编译器没有链接到文件,还是自己学艺不精。
这里要感谢一下同事大佬,感谢文哥。
对了。这个问题并不是很多人说的什么路径问题,我的c_cpp_properties.json文件没有改动。
情况二(在非components文件夹下添加)
比如我们在IDF提供的,hello_world文件夹下添加一个drv文件。这里我们把hello_world文件夹拷贝为test_project工程。在main的同级目录下创建一个drv目录,在该目录下添加文件。此时编译,发现找不到我们的需要的文件。
此时,在main文件夹下的component.mk文件中,添加如下代码:
COMPONENT_ADD_INCLUDEDIRS := . ../drv COMPONENT_SRCDIRS := . ../drv
这样就能让编译连链接到drv目录下。此时再make 。不会报错。