ESP32-IDF组件找不到头文件而mian可以找到情况解决

今天学习IDF时出现了一个怪现象,明明一个头文件(库),在main.c中都可以引用并编译成功,而在组件中就找不到头文件,甚至在组件中可以点开打开该头文件,而编译时就是找不到。这里记录解决方法。

问题分析

这其实是组件依赖问题,引用该头文件确没有依赖这个库,自然就找不到头文件。而main组件在构建过程中自动依赖所有其他组件,因此可以直接使用,而其他组件只包含了通用组件依赖,因此就需要添加依赖了。

通用组件依赖。一下组件在使用时不需要添加依赖:

cxx、newlib、freertos、esp_hw_support、heap、log、soc、hal、esp_rom、esp_common、esp_system。

添加依赖

idf_component_register()中的REQUIRES或者PRIV_REQUIRES中添加依赖。

如,要使用lcd,i2c,gpio,lvgl,esp_timer,就需要这样写:

1
2
3
4
idf_component_register(SRCS  "hx8369.c"  "lvgl_port.c" "gt911.c"
INCLUDE_DIRS "./include"
REQUIRES esp_lcd driver lvgl esp_timer)
#i2c和GPIO包含在driver中