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

news2024/9/30 11:22:50

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
我们休息一下
下集继续

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1991535.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MyBatis:Maven,Git,TortoiseGit,Gradle

1,Maven Maven是一个非常优秀的项目管理工具,采用一种“约定优于配置(CoC)”的策略来管理项目。使用Maven不仅可以把源代码构建成可发布的项目(包括编译、打包、测试和分发),还可以生成报告、生…

Find My Device技术|谷歌Find My Device网络支持的功能

谷歌新的" Find My Device " 网络覆盖了全球超过数十亿台活跃设备,谷歌 " Find My Device " 也和苹果 " Find My " 一样,支持防追踪功能,当检测到身边有未知蓝牙防丢器跟随移动时,会进行警报提醒。…

【C++题解】1084. 因子求和

欢迎关注本专栏《C从零基础到信奥赛入门级(CSP-J)》 问题:1084. 因子求和 类型:sqrt函数入门 题目描述: 已知一个正整数 N( 20≤N≤800000000 ),请你编写程序求出该数的全部因子&…

论文解读(15)-UrbanGPT

加油,这一篇也是感受一下大语言模型的力量! 原文: UrbanGPT: Spatio-Temporal Large Language Models UrbanGPT: Spatio-Temporal Large Language Models (arxiv.org) 参考: 时空预测与大语言模型的奇妙碰撞!UrbanG…

网卡与Linux网络结构(上)

原本是想借着之前学习的中断进一步拓展到网卡与中断的,标题都写好了,结果低估了其中的知识面和难度。。。。。于是调整为了网卡与Linux网络结构(上), 没错,仅仅只是上。。。我还是进一步低估了学习需要花费…

Zookeeper的监听机制及原理解析

系列文章目录 手把手教你安装Zookeeper 及可视化插件ZooInspector、ZKUI Zookeeper入门篇,了解ZK存储特点 使用Zookeeper的监听及原理解析 系列文章目录前言一、监听机制的基本概念二、Zookeeper监听原理1. 事件类型2. 监听模式与监听器类型(1&#xff…

深入理解计算机系统 CSAPP lab:bomb

实验资源下载地址:csapp.cs.cmu.edu/3e/labs.html 请先查看writeup 解压后 当我们运行bomb时,发现该程序要求我们输入行,如果输入错误,程序就会返回BOOM!!!提示我们失败了. 所以我们的目标是输入正确的行.以解开bomb程序. 实验前先详细阅读bomb.c //bomb.c /*****…

6.1 模块的导入与使用:Python的秘密武器

欢迎来到我的博客,很高兴能够在这里和您见面!欢迎订阅相关专栏: 工💗重💗hao💗:野老杂谈 ⭐️ 全网最全IT互联网公司面试宝典:收集整理全网各大IT互联网公司技术、项目、HR面试真题.…

Java语言程序设计基础篇_编程练习题*16.12(演示TextArea的属性)

目录 题目:*16.12(演示TextArea的属性) 习题思路: 代码示例 结果展示 题目:*16.12(演示TextArea的属性) 编写一个程序,演示文本域的属性。程序使用复选框表明文本是否换行&#xf…

Java面试题--JVM大厂篇之JVM监控与GC日志分析:优化Parallel GC性能的重要工具

目录 引言: 正文: 1. 理解GC日志的重要性 2. 启用GC日志 3. GC日志解析 4. JVM监控工具 5. 调优Parallel GC的实战技巧 痛点一:长时间停顿 痛点二:频繁的GC 痛点三:内存溢出 6. 实战案例分享 结束语&#…

linux进程----匿名管道和命名管道

linux进程----匿名管道和命名管道 在Linux中,管道是用于进程间通信的一种机制,可以分为两种类型:匿名管道(也称为匿名fifo)和命名管道(也称为命名fifo或named pipe)。 匿名管道(An…

如何解决整数溢出问题?

1、问题解析 当以整数数据类型(包括字节、短、长和其他类型)存储的值过大(大于变量可容纳的最大值)的值时,将发生整数溢出(或环 绕)。整数的最高有效位丢失,而其余值则相对于最小值…

Centos安装OpenSearch

Centos安装OpenSearch 下载并安装OpenSearch下载OpenSearch RPM包导入公共GNU Privacy Guard(GPG)密钥。此密钥验证您的OpenSearch实例是否已签名安装RPM包安装完设置开机自启动OpenSearch启动OpenSearch验证OpenSearch是否正确启动 测试OpenSearch向服务…

【lvs】超干货,包含理论+实验(详细步骤)

lvs理论部分 LVS(Linux Virtual Server)是Linux虚拟服务器的简称,是一个基于Linux操作系统的虚拟服务器集群系统。LVS主要用于实现负载均衡和高可用性,通过将客户端的请求分发到多台后端服务器上,从而提高整体服务的处…

JSON + AJAX + ThreadLocal

JSON数据交换 规则 JSON对象和字符串转换 <script type"text/javascript">var jsonPerson {"name": "jack","age": 20}console.log(jsonPerson);var strPerson JSON.stringify(jsonPerson);//对jsonPerson没有影响console.lo…

文件系统 --- 软硬链接

序言 经过上一篇的学习 在磁盘中的文件&#xff0c;我们大致了解了磁盘的物理结构&#xff0c;逻辑抽象结构以及文件在磁盘上的存储方式。在这篇文章中&#xff0c;我们会基于上一篇文章的部分知识点来介绍软链接&#xff0c;硬链接。 1. 软链接 1.1 软链接的概念 软链接是一个…

vue3+vite+ts 颜色选择器组件支持颜色吸取,透明度

ciw-color-picker-vue&#xff1a; vue3 vite ts 颜色选择器,支持颜色吸取,透明度&#xff0c;与浏览器原生颜色选择器相似,与饿了么颜色选择器相似 使用了ciw-color-picker-vue npm i ciw-color-picker-vue 安装 npm i ciw-color-picker-vue 全局引入方式 main.ts 或 m…

光伏检测室外气象站的重要性

在光伏产业的快速发展中&#xff0c;光伏检测室外气象站的重要性日益凸显。它不仅是光伏电站运维管理的“眼睛”&#xff0c;更是确保电站高效、稳定运行的关键因素。 首先&#xff0c;光伏检测室外气象站能够实时、准确地监测多种关键气象要素&#xff0c;如太阳辐射、风速、风…

【中间件】Redis从入门到精通-黑马点评综合实战

文章目录 一&#xff1a;Redis基础1.Redis是什么2.初识Redis3.Redis的数据结构A.通用命令B.String类型C.Key的层级格式D.Hash类型E.List类型F.Set类型G.SortedSet类型 二&#xff1a;Redis的Java客户端1.JedisA.引入依赖B.建立连接C.测试JedisD.释放资源 2.Jedis连接池3.Spring…

MM 13 -采购- 退货

思维导图 说明 情形1 直接冲销物料凭证 102 情形2 返货部分交货 情形3 退货PR贷项凭证 情形1 适用于已收货未开票&#xff0c;或者发票还可冲销的当月&#xff0c;冲销物料凭证所有数量 情形2 适用于跟情形1 一样&#xff0c;只是可以修改退货数量 情形3 如果已经跨越…