基于多个组件创建esp32静态库

Create esp32 static library based on multiple components

我是 esp-idf 开发的新手,我想为 esp32[ 构建一个 静态库 =68=]。 我已经阅读了 espressif 文档(可在此处获取:Programming Guide)但我无法创建适当的 .a 文件。

想法是开发一个新的包装器和函数库,其中包括来自 esp-dsp 库的函数。我已经将 esp-dsp 组件添加到我的项目中并创建了我自己的组件:my_component.

现在是我的项目结构:

- first_project/
             - CMakeLists.txt
             - sdkconfig
             - components/ - esp-dsp/ - CMakeLists.txt
                                      - ...
                                      - ...
                           - my_component/ - CMakeLists.txt
                                           - my_component.c
                                           - include/ 
                                                     - my_component.h
             - main/       - CMakeLists.txt
                           - main.c

             - build/
    

以下是 CMakeLists.txt 个文件:

CMakeLists.txt (first_project)

cmake_minimum_required(VERSION 3.5)
include($ENV{IDF_PATH}/tools/cmake/project.cmake)
project(first_test)

CMakeLists.txt(主)

idf_component_register(SRCS "main.c"
                    INCLUDE_DIRS "."
                    REQUIRES my_component esp-dsp)

CMakeLists.txt (my_component)

idf_component_register(SRCS "my_component.c"
                    INCLUDE_DIRS "include"
                    REQUIRES esp-dsp)

my_component.c中有来自esp-dsp

的函数

使用之前的文件,我设法创建了一个二进制文件以闪存到 ESP32 板中,但下一步是构建一个静态库 (my_library.a),其中包含 my_component.c 中的函数。

所以我尝试修改 CmakeLists.txt (main) 以创建关于组件 my_component

的静态库 [MyStaticLib.a]
cmake_minimum_required(VERSION 3.5)
include($ENV{IDF_PATH}/tools/cmake/project.cmake)
project(first_test)

ADD_LIBRARY( MyStaticLib STATIC
             components/my_component/my_component.c )
SET( APP_EXE StaticTest )
ADD_EXECUTABLE( ${APP_EXE}
                main/main.c ) 

TARGET_LINK_LIBRARIES( ${APP_EXE}
                    MyStaticLib )

但是,在构建过程中,我看不到 my_componentinclude 路径文件夹。然后编译失败因为my_component.h:No such file or directory

FAILED: CMakeFiles/MyStaticLib.dir/components/my_component/my_component.c.obj 
ccache C:\Users\julien\.espressif\tools\xtensa-esp32-elf\esp-2020r3-8.4.0\xtensa-esp32-elf\bin\xtensa-esp32-elf-gcc.exe   -mlongcalls -Wno-frame-address -g -MD -MT CMakeFiles/MyStaticLib.dir/components/my_component/my_component.c.obj -MF CMakeFiles\MyStaticLib.dir\components\my_component\my_component.c.obj.d -o CMakeFiles/MyStaticLib.dir/components/my_component/my_component.c.obj   -c ../components/my_component/my_component.c
../components/my_component/my_component.c:2:10: fatal error: my_component.h: No such file or directory

仅当我从 main 修改 CMakeLists.txt 以构建静态库时才会出现此问题。

我虽然 CMakeLists.txt 文件中的变量 INCLUDE_DIRS 可以解决问题,但徒劳无功。

知道我为了构建 .a 静态库以用作其他项目中的组件而在 CMakeLists.txt 参数中做错了什么吗?

此致。

只需按照您添加的组件构建示例即可。 您将在 build/esp-idf/ 文件夹下看到所有组件都构建为库 (.a)。

在其他项目中使用 libmy_component.a 以及 libesp_dsp.a