我正试图在我的项目中添加一个外部库。
我的项目结构如下:
-project
-- main
--- main.c
--- displayfunctions.c (where i implement my Displayfunctions based on the library)
--- 2 other .c files which got nothing to do with my Display
--- CMakeLists.txt
-- components
--- displaylibrary
---- CMAKELists.txt
---- all displayrelevant librarys pngle.c fontx.c etc..
---- include
----- all corresponding header files pngle.h fontx.h etc.
project/components/displaylibrarys
中的CMakeLists.txt
文件如下所示:
idf_component_register(
SRCS
"pngle.c"
"decode_jpeg.c"
"decode_png.c"
"fontx.c"
"ili9340.c"
INCLUDE_DIRS
"include")
include($ENV{IDF_PATH}/tools/cmake/project.cmake)
当我试图编译我的项目时,我得到了以下错误消息:
../components/Displaylibrarys/fontx.c:7:10: fatal error: esp_spiffs.h: No such file or directory #include "esp_spiffs.h"
很明显,我的编译器没有将外部库中包含的esp-idf库与实际的esp-idf库链接起来。我也尝试过这种方法
idf_component_register(
SRCS
"pngle.c"
"decode_jpeg.c"
"decode_png.c"
"fontx.c"
"ili9340.c"
INCLUDE_DIRS
"include"
REQUIRES
esp_spiffs)
但是没有结果。我应该如何正确地告诉我的编译器它知道这个库?
ESP-IDF构建系统与组件一起工作。您的库是一个组件,ESP-IDF库的许多部分也是如此。
作为组件方法的一部分,您的组件需要声明它所依赖的其他组件。这就是REQUIRES
子句的作用。
除了组件被称为spiffs
而不是esp_spiffs
之外,您几乎做对了。
idf_component_register(SRCS "pngle.c" "decode_jpeg.c" "decode_png.c" "fontx.c" "ili9340.c"
INCLUDE_DIRS "include"
REQUIRES spiffs)
我通常会查看ESP-IDF组件目录以找出正确的名称。组件和目录名称相同:https://github.com/espressif/esp-idf/tree/master/components