【ESP-IDF】工程中的cmake配置

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.elfimage_display.bin。每个 CMakeLists 文件只能定义一个项目。

2.2.可选的项目变量

  • EXTRA_COMPONENT_DIRS:用于搜索组件的其它可选目录列表。路径可以是相对于项目目录的相对路径,也可以是绝对路径。
  • COMPONENT_DIRS:组件的搜索目录,默认为 IDF_PATH/componentsPROJECT_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文件)

猜你喜欢

转载自blog.csdn.net/ManiacLook/article/details/131427943