好了,问题其实和我猜的差不多。就是CMake的问题。另外也和ESP-IDF的工程定义有关。

首先,ESP-IDF定义了工程必须有一个main文件夹,只能叫这个名。其中的文件被认为是工程的核心,自然 c_cpp_properties.json 里配置的文件包含路径仅对main文件夹里的文件有效。

所以我之前在components下的c文件引用别的地方的ESP固件就是提示打不开(找不到),main.c就可以。

所以正确的建立工程的姿势,就是在main文件夹下写那些程序,可以在main文件夹里分支文件夹,而不是在工程里。

components(组件)文件夹不是必须的,可以认为它是工程以外的程序。main文件夹里都是咱们要自己写的程序,components里一般都是厂家写好的程序,这里面的程序一般来说不需要改动,也不需要使用别的地方的头文件或C文件,自成一体,比如stm32的固件库比较适合放这里。有这个好处工程涉及的程序就全部打包了,拷贝走在别人电脑上也能用。

当然,我说了“是CMake的问题”,也就是说,只要是CMakeLists.txt里加几句,其实components也可以支持外联文件的,

具体是这样:

idf_component_register(
SRCS "comp1.c"
INCLUDE_DIRS "include" "C:/Users/a000021/Desktop/esp-idf/components/sdmmc/include"
)

那一长串就是后加的工程外头文件路径,直接指定它,刚写好时,VScode还不认识,还是提示头文件找不到,没事,编译一下,会发现编译过程中多了一个“ Re-running CMake...”,之后不管编译是否成功,它就都知道头文件要去哪找了。

以上完结,下面吐槽。

虽然感觉目前平台和这个CMake的坑是踩的差不多了,后面应该是可以愉快的开始和程序本身较劲了。但开发过程如此的别扭,总觉得不友好。之后可能会去事实安立信的那个基于eclipse搞的开发平台(但这个好像只能编译,烧写还要用ESP的工具,没整合),或者昨天在别处还看到一个一体的编译软件,名字忘了。

CMake本身好像有个UI可视化软件。但我提不起兴趣去学了,花费的精力太多了。

只是写个ESP32程序而已啊!熟悉平台、芯片不说,居然还要再学门什么系统文件管理语言——这还没提WIFI、蓝牙协议我还没看呢。还有SD卡和文件系统(好在这个多年前自己在STM32上实践过)不然这个学习量想想就让人头大,哪怕是搞了多年的单片机,要学的东西也几乎是推倒重学了

也不知道是ESP厂家宣传部门雇到了人才,还是真的国内对WIFI这快就是找不到比它更好用的了,把产品搞的要让人从语言开始从头学居然还能这么火。