当前位置: 首页 > news >正文

27集28集 ESP32 AIchat cmake编译解密-《MCU嵌入式AI开发笔记》

27-28集 ESP32 AIchat cmake编译解密-《MCU嵌入式AI开发笔记》

我们这集讲解学习cmake编译流程。
为了更好的理解,

我们要先了解几个cmake的内部变量:

CMAKE_SOURCE_DIR:整个CMake工程最顶层的CMakeLists.txt文件所在路径。
CMAKE_CURRENT_SOURCE_DIR:当前CMakeLists.txt文件所在路径。
CMAKE_CURRENT_LIST_DIR:当前*.cmake文件所在路径。
CMAKE_BINARY_DIR: 构建目录的顶层路径。
CMAKE_CURRENT_BINARY_DIR:构建当前CMakeLists.txt文件所在路径。
CMAKE_INSTALL_PREFIX:执行make install命令时安装的根目录的路径。
CMAKE_MODULE_PATH:find_package的module模式时,Find.cmake文件所在路径。
CMAKE_PREFIX_PATH: CMake的环境变量,存放CMake的搜索路径列表,可提供给find_package(), find_program(), find_library(), find_file(), 和find_path()等函数使用。

他会遍历工程目录的CMakeLists.txt文件。

先看最上层ai-chat目录下的CMakeLists.txt:

在这里插入图片描述
这里面引入
include( E N V A D F P A T H / C M a k e L i s t s . t x t ) i n c l u d e ( ENV{ADF_PATH}/CMakeLists.txt) include( ENVADFPATH/CMakeLists.txt)include(ENV{IDF_PATH}/tools/cmake/project.cmake)

也就执行了d:\Espressif\esp-adf\CMakeLists.txt

在这里插入图片描述
这里面遍历了WORKING_DIRECTORY,和EXTRA_COMPONENT_DIRS
之后执行:

d:\ESP-IDF\tools\cmake\project.cmake

来进行编译。
get_filename_component(sdkconfig “${SDKCONFIG}” ABSOLUTE)
这得到SDKCONFIG所在的绝对路径。也就是sdkconfig=d:\workspace\esp-idf\ai_chat\这样AI-CHAT工程里面的文件就加到里面了。

这里面SDKconfig里面设置了预编译的宏
在这里插入图片描述

get_filename_component这个得到sdkconfig的绝对路径。以便在cmake后续进行遍历编译。
之后会执行

include(${** CMAKE_CURRENT_LIST_DIR**}/targets.cmake)

(一共有两个targets.cmake,应该是ESP-IDF目录的这个** d:\ESP-IDF\tools\cmake\targets.cmake** ;d:\Espressif\frameworks\esp-idf-v5.2.2\tools\cmake\targets.cmake )
更正:
Setting IDF_PATH: D:\Espressif\frameworks\esp-idf-v5.2.2
Setting IDF_PATH: D:\Espressif\frameworks\esp-idf-v5.2.2
Setting IDF_PATH: D:\Espressif\frameworks\esp-idf-v5.2.2
所以我们要看d:\Espressif\frameworks\esp-idf-v5.2.2\tools\cmake\targets.cmake 这个targets.cmake

__target_init(“${sdkconfig}”)

之后

include(${CMAKE_CURRENT_LIST_DIR}/idf.cmake)

目录是d:\ESP-IDF\tools\cmake\idf.cmake
之后

set(IDFTOOL P Y T H O N " {PYTHON} " PYTHON"{IDF_PATH}/tools/idf.py")

应该是这个d:\ESP-IDF\tools\idf.py
之后会逐个遍历。

那我们下集
继续依次学习project.cmake、 targets.cmake、__target_init(“${sdkconfig}”) 、idf.cmake、idf.py

28集ESP IDF编译解密之targets.cmake-《MCU嵌入式AI开发笔记》

我们更正一下 IDF_PATH

:Setting IDF_PATH: D:\Espressif\frameworks\esp-idf-v5.2.2,
是这个目录。
在这里插入图片描述

targets.cmake

d:\Espressif\frameworks\esp-idf-v5.2.2\tools\cmake\targets.cmake
我们首先在sourceinsight里面加入*.cmake
在这里插入图片描述
之后我们看一下这个targets.cmake
有两个比较重要的函数:
macro(__target_set_toolchain)
macro(__target_init config_file)
在这里插入图片描述
在这里插入图片描述
我们在projects.cmake中调用了
__target_init(“KaTeX parse error: Expected group after '_' at position 27: …") 我们看一下 macro(_̲_target_init co…{sdkconfig}”)这个函数执行了什么。
首先设置了env_idf_target 咱们之前设置了的是esp32c3
在这里插入图片描述
之后设置sdkconfig_target
在这里插入图片描述
set(ENV{IDF_TARGET} ${env_idf_target})也就是要保证这两个设置的是一样的都是esp32c3

之后我们执行idf.cmake

include(${CMAKE_CURRENT_LIST_DIR}/idf.cmake)
d:\Espressif\frameworks\esp-idf-v5.2.2\tools\cmake\idf.cmake
我们休息一下
下集继续

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 谷粒商城实战笔记-nginx问题记录
  • 服务器测试之RAID知识梳理
  • MySQL的三大关键日志:Bin Log、Redo Log与Undo Log
  • 【开端】JAVA Mono<Void>向前端返回没有登陆或登录超时 暂无权限访问信息组装
  • Zookeeper的监听机制及原理解析
  • 算法【前缀和与差分】
  • LeNet5模型搭建
  • 华为OD-D卷小明找位置
  • 学习记录(9):Prompt提示词技巧
  • source insight 3.5快捷键合集
  • 模板方法模式(Template Method Pattern)
  • 三数之和-Leetcode
  • 深入理解 Vuex:Vue.js 应用的状态管理
  • 《最新出炉》系列小成篇-Python+Playwright自动化测试-66 - 等待元素至指定状态(出现、移除、显示和隐藏)
  • mysql数据库:SQL语言基础和基本查询
  • 收藏网友的 源程序下载网
  • Android Studio:GIT提交项目到远程仓库
  •  D - 粉碎叛乱F - 其他起义
  • ES学习笔记(12)--Symbol
  • Java的Interrupt与线程中断
  • Linux编程学习笔记 | Linux多线程学习[2] - 线程的同步
  • nginx 负载服务器优化
  • Node 版本管理
  • NSTimer学习笔记
  • QQ浏览器x5内核的兼容性问题
  • react 代码优化(一) ——事件处理
  • TCP拥塞控制
  • WordPress 获取当前文章下的所有附件/获取指定ID文章的附件(图片、文件、视频)...
  • 闭包,sync使用细节
  • 创建一个Struts2项目maven 方式
  • 给初学者:JavaScript 中数组操作注意点
  • 记录:CentOS7.2配置LNMP环境记录
  • 解析带emoji和链接的聊天系统消息
  • 快速体验 Sentinel 集群限流功能,只需简单几步
  • 类orAPI - 收藏集 - 掘金
  • 浅谈Golang中select的用法
  • 深入浅出webpack学习(1)--核心概念
  • 实战|智能家居行业移动应用性能分析
  • 适配mpvue平台的的微信小程序日历组件mpvue-calendar
  • 树莓派 - 使用须知
  • 小试R空间处理新库sf
  • 这几个编码小技巧将令你 PHP 代码更加简洁
  • 《天龙八部3D》Unity技术方案揭秘
  • C# - 为值类型重定义相等性
  • const的用法,特别是用在函数前面与后面的区别
  • # 职场生活之道:善于团结
  • #每天一道面试题# 什么是MySQL的回表查询
  • (二)linux使用docker容器运行mysql
  • (一一四)第九章编程练习
  • (最新)华为 2024 届秋招-硬件技术工程师-单板硬件开发—机试题—(共12套)(每套四十题)
  • ****** 二十三 ******、软设笔记【数据库】-数据操作-常用关系操作、关系运算
  • .FileZilla的使用和主动模式被动模式介绍
  • .net CHARTING图表控件下载地址
  • .NET/C# 推荐一个我设计的缓存类型(适合缓存反射等耗性能的操作,附用法)
  • .NET8使用VS2022打包Docker镜像