ESP32 :项目的创建及项目架构解析

一、项目的创建

方式一:基于IDF示例创建
在ESP-IDF中有example示例库,以其中的一个示例为模板创建项目。

1、打开示例库
查看 - 命令面板(也可以按住Ctrl+Shift+P 或 F1)
在这里插入图片描述
输入 show examples projects

在这里插入图片描述
2、以 hello_word 示例为模板,创建项目
在这里插入图片描述
方式二:直接创建项目

注意:直接创建项目要在文件夹中

1、用Vscode打开一个文件夹

文件-打开文件夹, 这里我们选了刚才放示例的文件夹“test”
在这里插入图片描述
2、开始创建

查看 - 命令面板(也可以按住Ctrl+Shift+P 或 F1)

输入 Create project from extension template  创建项目模板 
在这里插入图片描述
在这里插入图片描述
第1项:将项目放在当前的test文件夹中。第二项:选择其他文件夹放置项目。

选择"template-app"
在这里插入图片描述
二、项目架构
在这里插入图片描述
这是一个最基本的hello-world工程,一个工程里,包含着很多的文件以及目录

.vscode目录:

这个目录是用来存放配置内容,比如:

settiong.json:用来控制诸多工作项的配置。如:工作空间设置、代码格式化配置、插件配置。

tasks.json:辅助程序编译的模块,我们只要在图形界面下操作即可生成可执行文件,即可代你执 行类似于在命令行输入 “gcc hello.c -o hello” 命令的操作。

launch.json:用于调试的配置文件,比如指定调试语言环境,指定调试类型等等。

c_cpp_properties.json:用于配置编译器环境的,包括启动器代号、位数(这些是自定义的)、编 译选项、启动设置、编译模式等。

build目录:

这个目录是用来存放编译输出的地方,如果没有这个目录,idf.py 在编译时会自动创建。CMake配置项 目后会在这个目录下生成临时的文件。此目录通常不会添加到项目的源码管理系统中,也不会随项目源 码一同发布。

main目录:

这个目录包含项目本身的源代码,main是一个默认名,意为主目录。

CMakelists.txt

这个文件设置了项目的全局变量,一般的CMakelists.txt分为顶层和其他层。 顶层的CMakelists.txt会导入esp-idf/tools/cmake/project.cmake 文件,由它负责实现构建系统的其余 部分。该文件最后会设置项目的名称,并定义该项目。说简单点,他就是CMake的配置文件。指定了由源码到目标文件的规则,十分重要。可以说有代码的地 方就有他。

Makefile

(由于使用的是CMake编译,在这里不需要使用Makefile,可删)

makefile工具被用来自动完成编译工作。包括:如果仅修改了某几个源文件,则只重新编译这几个源文 件;如果某个头文件被修改了,则重新编译所有包含该头文件的源文件。利用这种自动编译可大大简化 开发工作,避免不必要的重新编译。

sdkconfig

使用CMake编译时,从sdkconfig文件中加载项目配置信息,生成 sdkconfig.cmake 和 sdkconfig.h 文 件,分别用在 CMake 和 C/C++ 中定义配置项。如果项目配置发生了更改,CMake 会自动重新运行,重 新生成上述两个文件,接着重新配置项目。通过idf.py menuconfig可以修改配置项。

README.md

项目的描述说明,markdown文档。 除了上面说的这些目录,还有部分文件是后期创建,但经常会用到的。

component

目录中是项目的部分自定义组件,并不是每个项目都需要这种自定义组件,但它组件有助于构建可复用 的代码或者导入第三方(不属于 ESP-IDF)的组件。 最基础的组件包含着一个.c文件和对应的.h文件,以及一个CMakelists.txt。

在这里插入图片描述
三、CMakelists.txt

esp-idf在4.0版本之后是采用cmake来建立工程的,一般的工程中cmake都分为最外层(顶层)和内层 (其他层)。 我们最小工程helloworld中的cmake来简单分析一下cmake中的代码。

打开工程根目录编译脚本CMakeLists.txt可以看到下图我用蓝色标识出来的那条语句,其中IDF_PATH就是ESP-IDF在本机中的安装路径,例如我的安装路径就是这样的:“IDF_PATH”: “E:/Espressif/esp-idf”。

最外层分析
在这里插入图片描述
在cmake中,井号#表示注释的意思,等同于c语言中的//。

cmake_minimum_required 指的是cmake需要的最小版本,上面表示cmake版本需要3.5

include 表示需要导入esp-idf中的某个cmake文件,这个文件的作用是把esp-idf中所有的库放到我们的 工程中,只有这样我们才能在工程里面调用esp-idf库中的函数

project 这里是工程的命名,这个名字可以自取

最外层的CMakelists.txt 一般无需修改

内层分析
在这里插入图片描述
idf_component_register 这个函数是来自外层导入的文件,我们通过这个函数将自己的文件加入工程。

SRCS就是添加.c文件,而INCLUDE_DIRS则是用来添加.h文件所处的文件夹,这里加入.表示自身路径。

由于工程中.c文件的名字修改需要cmakelists.txt同步修改,所以我们直接用file函数利用正则将自身路 径下的所有.c文件列出来赋值给 SOURCES变量,并在SRCS中引入,这样就可以省去在cmakelists.txt中 修改.c名字的步骤。

CMakelists.txt 万能模板

最外层:
cmake_minimum_required(VERSION 3.5)

include($ENV{IDF_PATH}/tools/cmake/project.cmake)
project(project_name)
其他层:
file(GLOB_RECURSE SOURCES *.c)
idf_component_register(SRCS ${SOURCES}
INCLUDE_DIRS “.”)

猜你喜欢

转载自blog.csdn.net/qizhi321123/article/details/130880121