【ESP32学习笔记】--向IDF工程中添加新的组件(包含文件夹、源文件与头文件)


前言

在乐鑫的官方文档中对组件的描述如下:

是模块化且独立的代码,会被编译成静态库(.a 文件)并链接到应用程序。部分组件由 ESP-IDF 官方提供,其他组件则来源于其它开源项目。

可以简单理解为工程下每个文件夹(包含源文件和头文件或仅源文件)都可以看做为一个组件,要添加的用户自己的组件则属于组件中的“其他组件”。相较于KEIL工程添加文件夹和源文件可以直接在IDE中点击添加,ESP32的IDF工程添加文件夹和源文件(组件)则需要在"CMakeLists.txt"中添加脚本来实现,略微麻烦,这是由于IDF工程是由CMake构建、链接编译的。本文参考乐鑫《ESP-IDF编程指南》构建系统章节进行组件(包含用户自己的文件夹、源文件与头文件)的添加,并以官方例程"blink"作为示例。

一、工程目录结构

由IDF生成blink工程示例目录树结构如下(其他与“添加组件”无关的文件未展示):

- blink/
             - CMakeLists.txt
             - sdkconfig
             - esp_idf_components/		#此文件夹下为官方组件,不展开
             - main/       - CMakeLists.txt
                           - blink_example_main.c
             - build/

二、添加组件原理

在乐鑫《ESP-IDF编程指南》的构建系统内部章节中给出了标准的 ESP-IDF 应用构建过程,构建过程可以大致分为四个阶段:

ESP-IDF Build System Process
我们可以从这个过程中去了解组件是如何参与工程编译并总结添加组件的方法。

  1. 初始化时,在构建系统内部章节中是这样描述的:

在将 idf.cmake 导入 project.cmake 后,将执行以下步骤:

  • 在环境变量中设置 IDF_PATH 或从顶层 CMakeLists.txt 中包含的 project.cmake 路径推断相对路径。
  • 将 /tools/cmake 添加到 CMAKE_MODULE_PATH 中,并导入核心模块和各种辅助/第三方脚本。
  • 设置构建工具/可执行文件,如默认的 Python 解释器。
  • 获取 ESP-IDF git 修订版,并存储为 IDF_VER
  • 设置全局构建参数,即编译选项、编译定义、包括所有组件的 include 目录。
  • 将 components 中的组件添加到构建中。

自定义 project() 命令的初始部分执行以下步骤:

  • 在环境变量或 CMake 缓存中设置 IDF_TARGET 以及设置相应要使用的CMAKE_TOOLCHAIN_FILE
  • 添加 EXTRA_COMPONENTS_DIRS 中的组件至构建中。
  • COMPONENTS/EXCLUDE_COMPONENTSSDKCONFIGSDKCONFIG_DEFAULTS 等变量中为调用命令 idf_build_process() 准备参数。

调用 idf_build_process() 命令标志着这个阶段的结束。

我们不必完全了解上述的初始化过程,只需要关注与添加组件相关的内容:

  • 在环境变量中设置 IDF_PATH 或从顶层 CMakeLists.txt 中包含的 project.cmake 路径推断相对路径。
  • 添加 EXTRA_COMPONENTS_DIRS 中的组件至构建中。

从中可以得到的信息是,标准的 ESP-IDF 应用构建是从顶层文件夹(本例为"blink"文件夹)下"CMakeLists.txt"开始的,并且在 EXTRA_COMPONENTS_DIRS中保存有组件的信息,而保存的组件信息又会参与到构建过程中。所以我们需要重点关注"CMakeLists.txt" EXTRA_COMPONENTS_DIRS,至于在"CMakeLists.txt"中做了什么和 EXTRA_COMPONENTS_DIRS保存了什么信息、如何保存信息后文会讲到。
首先来看一

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值