在ESP32
的官方代码中,会使用cmake
作为编译工具,本文以官方例程image_display为例,对移植时可能会修改的一些部分进行记录。
1.main
文件夹中的cmake
文件
CMakeLists.txt
中的文本内容如下。
SRCS
后表示的是需要编译的源文件。INCLUDE_DIRS
后表示的是需要包含的目录文件夹,其相对路径是从main
文件夹下开始的。
idf_component_register(
SRCS
"image_display.c"
INCLUDE_DIRS
"")
spiffs_create_partition_image(storage ../spiffs FLASH_IN_PROJECT)
例如需要编译源文件main.c
,和包含目录images
,就修改成如下代码。
idf_component_register(
SRCS
"main.c"
INCLUDE_DIRS
"../images")
spiffs_create_partition_image(storage ../spiffs FLASH_IN_PROJECT)
2.工程顶层目录下的cmake
文件
工程目录的顶层有一个CMakeLists.txt
,包含整个项目的构建设置。
cmake_minimum_required(VERSION 3.5)
include($ENV{
IDF_PATH}/tools/cmake/project.cmake)
set(EXTRA_COMPONENT_DIRS ../../components)
add_compile_options(-fdiagnostics-color=always)
project(image_display)
2.1.必要部分
cmake_minimum_required(VERSION 3.5)
必须放在CMakeLists.txt
文件的第一行,它会告诉CMake
构建该项目所需要的最小版本号。ESP-IDF
支持CMake 3.5
或更高的版本。include($ENV{IDF_PATH}/tools/cmake/project.cmake)
会导入CMake
的其余功能来完成配置项目、检索组件等任务。project(image_display)
指定image_display
为工程名,该命令会创建项目本身,并指定项目名称。该名称会作为最终输出的二进制文件的名字,即image_display.elf
和image_display.bin
。每个CMakeLists
文件只能定义一个项目。
2.2.可选的项目变量
EXTRA_COMPONENT_DIRS
:用于搜索组件的其它可选目录列表。路径可以是相对于项目目录的相对路径,也可以是绝对路径。COMPONENT_DIRS
:组件的搜索目录,默认为IDF_PATH/components
、PROJECT_DIR/components
、和EXTRA_COMPONENT_DIRS
。如果你不想在这些位置搜索组件,请覆盖此变量。COMPONENTS
:要构建进项目中的组件名称列表,默认为COMPONENT_DIRS
目录下检索到的所有组件。使用此变量可以“精简”项目以缩短构建时间。请注意,如果一个组件通过COMPONENT_REQUIRES
指定了它依赖的另一个组件,则会自动将其添加到COMPONENTS
中,所以COMPONENTS
列表可能会非常短。
以上变量中的路径可以是绝对路径,或者是相对于项目目录的相对路径。
请使用cmake
中的set
命令 来设置这些变量,如set(VARIABLE "VALUE")
。请注意,set()
命令需放在include(...)
之前,cmake_minimum(...)
之后,比如如下方式:
cmake_minimum_required(VERSION 3.5)
set(EXTRA_COMPONENT_DIRS $ENV{
IDF_PATH}/examples/common_components/led_strip)
include($ENV{
IDF_PATH}/tools/cmake/project.cmake)
参考内容:
IDF工程创建与CMake配置
ESP32-添加多目录的自定义组件
ESP官方关于构建系统的文档
ESPIDF添加自定义组件(创建C和H文件)