在使用ESP32 IDF开发(包括使用VScode)的时候有时候需要添加我们自己的文件夹和源文件。之前一直没时间摸索如何添加,添加了几次没成功就放弃了,这次成功添加了自己的源文件和文件夹。
如下工程文件目录
- myProject/
- CMakeLists.txt
- sdkconfig
- components/ - component1/ - CMakeLists.txt
- Kconfig
- src1.c
- component2/ - CMakeLists.txt
- Kconfig
- src1.c
- include/ - component2.h
- main/ - CMakeLists.txt
- src1.c
- src2.c
- build/
1、乐鑫官方对 components 路径的介绍:“可选的 “components” 目录中包含了项目的部分自定义组件,并不是每个项目都需要这种自定义组件,但它有助于构建可复用的代码或者导入第三方(不属于 ESP-IDF)的组件。或者,您也可以在顶层 CMakeLists.txt 中设置EXTRA_COMPONENT_DIRS 变量以查找其他指定位置处的组件。
可见 components 路径正是用于我们的这种需求。
按照官方的说法,有两种方法添加额外的组件:
1 )在顶层目录下的 components 路径下添加组件(也就是在main文件夹的同层创建一个名字为components的目录,其下的子目录也会自动包含进去)。
2 )在顶层目录下的 CMakeLists.txt 中设置 EXTRA_COMPONENT_DIRS 变量以查找其他指定位置处的组件。(此方法可以创建一个名字不是components的目录)
原理:配置项目、检索组件等任务都是 $ENV{IDF_PATH}/tools/cmake/project.cmake 决定的。
组件默认的搜索目录为 IDF_PATH/components、 PROJECT_DIR/components、和 EXTRA_COMPONENT_DIRS。
IDF_PATH/components 用于系统组件。我们一般不会将文件放在这里面。
PROJECT_DIR/components、和 EXTRA_COMPONENT_DIRS 对应上面两种添加组件的方法。
2 具体操作如下:
2.1 在 PROJECT_DIR/components 中添加组件(推荐)
步骤:
1 首先新建 PROJECT_DIR/components 路径。
2 在PROJECT_DIR/components 中添加我们自定义的组件,比如我添加了 oled_driver
3 将组件相关的头文件和源文件放到 oled_driver 中,并新建 CMakeLists.txt 文件。
4 在 CMakeLists.txt 中添加源文件与头文件的路径。格式为:
idf_component_register(SRCS "file1.c" "fileN.c"
INCLUDE_DIRS "路径1" "路径N")
我只有一个源文件,则内容为:
idf_component_register(SRCS "oled_driver.c"
INCLUDE_DIRS ".")
此方法的文件创建过程还可以使用idf.py -C components create-component my_component
一键完成。
2.2 在自定义的 EXTRA_COMPONENT_DIRS 中添加组件
步骤:
1 新建自定义的 components 路径,比如我在 PROJECT_DIR 中新建名为 /import/oled_driver 的文件夹。
2 修改项目变量 EXTRA_COMPONENT_DIRS
cmake_minimum_required(VERSION 3.5)
include($ENV{IDF_PATH}/tools/cmake/project.cmake)
set(EXTRA_COMPONENT_DIRS "./import") # 因为oled_driver文件夹作为组件、所以组件路径为“./import”
project(oled_driver_test)
这里需要注意的是,需要在 project(oled_driver_test)
调用function之前设置EXTRA_COMPONENT_DIRS变量的值.
对于添加完文件夹后,编译提示找不到头文件的问题,可以参考下一篇博客的文章,需要设置引用的组件的方法来解决。