ESPIDF+VSCODE开发中的几个隐蔽的坑(包括一个隐蔽的头文件标红的no such file的情况)

踩坑案例

场景1:

EPSIDF在VSCODE新建项目的时候,UI界面下方会有一栏让用户选择导入其它components至项目:由此导入的其他的components,是被放在项目根目录下的components文件夹中。以下将项目根目录称为projectroot。
坑点一:
这个components文件夹并不是让你导入ESPIDF目录下的components文件夹的。不要自作聪明(啊对,就是说我自己)将ESPIDF目录下的components导入进来。
ESPIDF/components下的组件会自动被cmake在构建项目的时候搜寻并寻找依赖,而cmake找完彼components文件夹后,就会来到projectroot/components这个文件夹寻找其它非ESPIDF组件。
坑点一总结:
projectroot/components文件夹下是让存放其它非官方自带组件的!不需要将官方组件弄进来!并且这个文件夹下的组件不要引用官方组件中的库!至于为什么,请接着往下看。

场景2:

新建了项目,就想自己编写几个组件用用。一看有个projectroot/components文件夹,就说把组件写这下面吧。然后写了几个.c和.h,以及cmakelists。写的时候,引用了几个ESPIDF/components下的头文件。然后main中再include自己刚写的这几个。再然后,编译不通过并且自写组件的.h内头文件标红。
坑点二:
这里有一个现象:
当main文件夹存在的时候,不能在该文件夹之外的其它组件目录下,编写代码时INCLUDE进EPSIDF自带组件中的库,如“esp_wifi.h”、"freeRTOS.h"等。否则就会出现头文件标红并且提示no such file。而且这个问题还很令人无语,你明明对着那个标红的头文件,ctrl+点击都能点进去,它就是提示no such file,而且build的时候还不给过。这就给人一种,似乎VSCODE在玩你,揣着明白它装糊涂的感觉。 这个问题网上提出的人不多,可能是它有点难触发 (也可能是这个问题有点蠢) 。要是只在main下写自己的.c.h,那没这毛病,如果在projectroot/components写就会出现这种情况。
结合ESPIDF的官方文档,我推断是,ESPIDF默认不支持非main组件以外的组件:在cmakelists.txt不写明的情况下相互引用。

关于main组件的说明:offical:ESP-IDF build system

但说实话,目前还没有啃懂如何在components目录下写组件还能照常引用官方库的。理论上应该是可以的。如有高手,恳请赐教!
坑点二总结:
1、在main目录下写带引用官方库的文件最方便,如果要写的文件很多,可以在main目录下建立文件夹,但是子文件夹中不要带cmakelists,并且在main的cmakelist中将子文件夹下的文件带子文件夹路径加入到SRC字段,并将子文件夹加入INCLUDE字段即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值