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(ENVADFPATH/CMakeLists.txt)include(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 PYTHON"{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
我们休息一下
下集继续

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

柔贝特三哥

你的鼓励是我坚持创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值