基于多个组件创建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_component
的 include
路径文件夹。然后编译失败因为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
。
我是 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
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_component
的 include
路径文件夹。然后编译失败因为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
。