ESP32开发2——新建项目
由于之前都是使用keil这种IDE进行开发,很多步骤如创建工程、编译都可以在IDE内完成。因此进行ESP32开发首先要了解它项目的文件结构与编译方式,能够创建一个项目,这样才能进入后续的开发学习。
ESP-IDF框架文件结构
未经编译的项目
在这以例程中的Sample project为例进行展开。
首先在官方例程中找到它 路径:__./esp-idf/examples/get-started/sample_project
可以看到它的文件结构
├──sample_project
├── main
│ ├── CMakeLists.txt
│ ├── component.mk
│ └── main.c
├── CMakeLists.txt
├── Makefile
└── README.md
(上述的文件结构中 _CMakelists.txt,Makefile,component.mk_都是编译文件,由此我们也可以看出其实它支持两种编译方式 CMkake和GNU Make。我们通常使用CMake因此只需要关注_CMakelists.txt_文件即可。)
它的文件结构还是较为简单的,顶层文件夹_sample_project_中包含一个mian文件夹(又称为组件)及顶层编译文件CMakelists.txt,而在_main_文件夹中为源代码main.c及组件的编译文件CMakelists.txt 。
- mian文件夹:这个文件夹下主要用于存放源文件,也可以将其成为main组件。main是默认名称,在CMake默认包含此组件。若修改文件名称需要同步更改相应CMake变量
- 顶层CMakelists.txt:包含整个项目的构建设置,包括CMake版本、文件索引等信息
- 源代码main.c:项目的源代码,名称可以任意但同样的若改变文件名需要在组件CMakelists.txt中同步更改
- 组件CMakelists.txt:源文件与相应库链接
编译后项目
项目经过编译后会增加一些文件,文件结构也会有所不同
├──sample_project
├── build
│ ├── bootloader
│ └── ...
├── main
│ ├── CMakeLists.txt
│ ├── component.mk
│ └── main.c
├── CMakeLists.txt
├── Makefile
├── README.md
└── sdkconfig
相较于未编译的文件,编译后多了build文件夹及sdkconfig文件,这些都是自动创建的无需开发者操作。
- build文件夹:为经过编译器编译后产生的编译文件包括临时目标文件、库文件以及最终输出的二进制文件
- sdkconfig:此文件为项目配置文件,保存项目的配置信息,执行idf,py menuconfig可更新此文件
新建项目
新建项目可以直接使用idf.py creat_project name指令进行创建
不过为了方便我们直接使用现成的项目复制,再对其进行修改。这里以上述的sample_project项目为例。
文件结构如下
├──sample_project
├── BSP
│ ├── inc
│ └── src
├── main
│ ├── CMakeLists.txt
│ └── main.c
├── CMakeLists.txt
└── README.md
文件结构如图
其中BSP文件夹下存放模块化的驱动文件
首先对顶层CMakelists.txt文件进行编辑
# For more information about build system see
# https://docs.espressif.com/projects/esp-idf/en/latest/api-guides/build-system.html
# The following five lines of boilerplate have to be in your project's
# CMakeLists in this exact order for cmake to work correctly
cmake_minimum_required(VERSION 3.5)
include($ENV{IDF_PATH}/tools/cmake/project.cmake)
project(sample_project)
主要注意最下面的**project(sample_project)**这个用于指定项目名称,因此当文件夹名称改变时也要对此进行编辑
接着对mian文件夹下的CMakelists.txt文件进行编辑
set(my_inc "main.c"
"../BSP/src/led.c" )#源文件索引
idf_component_register(SRCS "${my_inc}" #源文件列表
INCLUDE_DIRS "." #头文件目录
"../BSP/inc")
该文件用于设置需要编译的文件,所有引用的源文件都要包含进。由于驱动文件都放置于上级目录下的BSP文件下 因此需要开头加上“…/”表面上一级目录下。
这样一个基础的项目就创建完毕了,之后就可以直接复制该项目进行操作,只要根据实际情况更改两个CMlists.txt文件即可。