ESP32 IDF 给工程新增文件夹与源文件

1 背景

ESP32 学习已经有一段时间了,最近在写一些简单的驱动,为了方便程序的管理与后续的移植,就有将特定驱动相关的文件放在单独文件夹的需求。

2 原理

之前学习过IDF创建的工程的文件结构: esp32系列(2):工程结构学习,从新建工程到烧写程序

- 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/

现在再深入学习一下,乐鑫官方对 components 路径的介绍:“可选的 “components” 目录中包含了项目的部分自定义组件,并不是每个项目都需要这种自定义组件,但它有助于构建可复用的代码或者导入第三方(不属于 ESP-IDF)的组件。或者,您也可以在顶层 CMakeLists.txt 中设置 EXTRA_COMPONENT_DIRS 变量以查找其他指定位置处的组件。有关详细信息,请参阅 重命名 main 组件。如果项目中源文件较多,建议将其归于组件中,而不是全部放在 “main” 中。”

可见 components 路径正是用于我们的这种需求。

按照官方的说法,有两种方法添加额外的组件:

  • 1 在顶层目录下的 components 路径下添加组件。
  • 2 在顶层目录下的 CMakeLists.txt 中设置 EXTRA_COMPONENT_DIRS 变量以查找其他指定位置处的组件。

原理:
配置项目、检索组件等任务都是 $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 对应上面两种添加组件的方法。

3 方法

3.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一键完成。

3.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变量的值。
    在这里插入图片描述
  • 12
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lu-ming.xyz

觉得有用的话点个赞吧 :)

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值