您的位置:首页 > 房产 > 建筑 > 27集28集 ESP32 AIchat cmake编译解密-《MCU嵌入式AI开发笔记》

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

2024/10/6 8:27:13 来源:https://blog.csdn.net/phlr5/article/details/140967685  浏览:    关键词: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
我们休息一下
下集继续

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com