“ 你是否在ESP32开发中为复杂的项目构建配置头疼?CMakeLists.txt是ESP32项目的核心,但许多开发者对其配置一知半解。本文从项目顶层配置到组件级设置,详解最小化CMakeLists.txt的写法,助你快速掌握ESP-IDF构建系统的精髓!本文内容可以作为后续ESP32配置CMakeLists.txt的参数表使用!”
01 项目顶层 CMakeLists.txt
每个ESP32项目都有一个顶层CMakeList.txt文件,包含整个项目的构建设置。默认情况下,项目 CMakeLists 文件会非常小。项目顶层最小的CMakeLists.txt内容以及描述如下:cmake_minimum_required(VERSION 3.16)
include($ENV{IDF_PATH}/tools/cmake/project.cmake)
project(myProject)
说明:
1. 每个项目都必须按照上面顺序添加上述代码, 组成最小的项目CMakeList.txt.
2. cmake_minimum_required(VERSION 3.16):
必须放在第一行,告诉CMake构建该项目所需要的最小版本号.
3. include($ENV{IDF_PATH}/tools/cmake/project.cmake):
导入project.camke. 该文件包含CMake的一些功能, 完成项目配置、组件检索等任务。
4. project(projectName):
创建项目, 并指定项目的名称为projectName.
同时该名称作为输出的二进制文件的名称(projectName.elf、projectName.bin).
可选的项目变量 | |
| PROJECT_DIR/components 和EXTRA_COMPONENT_DIRS 。 |
| |
| COMPONENT_DIRS 目录下检索到的所有组件. |
BOOTLOADER_IGNORE_EXTRA_COMPONENT | 引导加载程序编译时应忽略的组件列表, 位于 bootloader_components/ 目录中. 使用这一变量可以将一个组件有条件地包含在项目中. |
1. 上面的变量中的路径,可以使用绝对路径和相对项目的相对路径.2. 设置变量时需使用cmake中的"set"命令.格式: set(VARIABLE "VALUE")
示例:(添加组件搜索路径: 根路径/led目录) set(EXTRA_COMPONENT_DIRS "led")
|
组件最小的CMakeLists.txt内容以及描述如下:idf_component_register(SRCS "xxx.c" "yyy.c"
INCLUDE_DIRS "include")
说明:
1. 通过使用idf_component_register()将组件添加到cmake构建系统中.
2. "SRCS": 源文件列表(*.c、*.cpp、*.cc、*.s), 所有源文件都会编译到组件库中.
3. "INCLUDE_DIRS": 目录列表(头文件). 目录路径会被添加到使用该组件的全局include搜索路径中.
idf_component_register参数 | |
| 如果未指定, 则组件会被认为仅配置组件, 从而创建接口库. |
| 用于通过指定目录来 glob源文件 (.c、.cpp、.S),而不是通过 SRCS 手动指定源文件 |
| 该路径将被添加到需要当前组件的所有其他组件的 include 搜索路径中. |
| |
| |
| |
| |
| |
| |
| 覆盖默认的 Kconfig.projbuild 文件 |
| 如果指定了此参数,链接时会在组件库的前后分别添加 -Wl,--whole-archive 和 -Wl,--no-whole-archive 。这与设置 WHOLE_ARCHIVE 组件属性的效果一致。 |
下表描述了专用于组件CMakeList.txt的变量,乐鑫官方建议:不要修改! | |
| 组件目录,即包含 CMakeLists.txt 文件的绝对路径,它与 CMAKE_CURRENT_SOURCE_DIR 变量一样,路径中不能包含空格。 |
| |
| |
| |
| 组件版本,由 idf_component.yml 指定并由 IDF 组件管理器设置。 |
以下是可作为构建属性的构建/项目变量,可通过组件 CMakeLists.txt 中的 idf_build_get_property
查询其变量值。 | |
| 项目名,在项目 CMakeLists.txt 文件中设置。 |
| 项目目录(包含项目 CMakeLists 文件)的绝对路径,与 CMAKE_SOURCE_DIR 变量相同。 |
| 此次构建中包含的所有组件的名称,具体格式为用分号隔开的 CMake 列表。 |
| ESP-IDF 的 git 版本号,由 git describe 命令生成。 |
| ESP-IDF 的组件版本,可用于条件表达式。请注意这些信息的精确度不如 IDF_VER 变量,版本号 v4.0-dev-* , v4.0-beta1 , v4.0-rc1 和 v4.0 对应的 IDF_VERSION_* 变量值是相同的,但是 IDF_VER 的值是不同的。 |
| |
| |
| CMake 列表,用于创建额外的分区子类型。子类型的描述由字符串组成,以逗号为分隔,格式为 type_name, subtype_name, numeric_value 。组件可通过此列表,添加新的子类型。 |
掌握CMakeLists.txt的配置是高效开发ESP32项目的关键一步。本篇推文从项目顶层最小CmakeLists.txt、可选的项目变量到组件的最小CMakeLists.txt、idf_component_register参数进行了描述。本文内容可以作为后续ESP32配置CMakeLists.txt的参数表使用.点击「在看」,让更多朋友看到这篇干货 🌟