我正在尝试将 this 库添加到 Visual Studio Code 中的 ESP-IDF 应用程序(不使用 PlatformIO)。
这是我所做的步骤:
components/components/
文件夹下下载了上述库main.cpp
中添加一些代码:#define EVE_CS GPIO_NUM_47
#define EVE_PDN GPIO_NUM_11
#define EVE_SCK GPIO_NUM_19
#define EVE_MISO GPIO_NUM_20
#define EVE_MOSI GPIO_NUM_21
#define EVE_NHD_50
#include <stdio.h>
#include "../components/components/FT800-FT813-5.x/src/EVE.h"
void app_main(void)
{
EVE_init_spi();
}
现在,链接器失败了:
/home/mark/myproject/main/main.c:14:(.text.app_main+0x3):对“EVE_init_spi”的未定义引用
图书馆的自述文件说:
通过 EVE_target.h 中的编译器标志自动检测代码编译的平台
确实,在里面
EVE_target.h
我看到:
#if defined (ESP_PLATFORM)
#include "EVE_target/EVE_target_ESP32.h"
#endif /* ESP_PLATFORM */
和
ESP_PLAFTORM
定义为 1(我可以看到它悬停在鼠标上并出现工具提示)。然后我按照 EVE_target_ESP32.h
进行操作,并在那里定义了平台。但是 void EVE_init_spi(void);
的实现位于 EVE_target.c
内部,并且在该文件 ESP_PLAFORM
中未定义。
因此,与 ESP32(甚至其他平台)相关的所有代码都未启用,我猜这就是链接器错误的原因。由于我将库文件夹放入
components
目录中,我预计它已经由 CMake 处理。顺便说一句,这些是顶级和代码级 CMakeLists.txt 文件:
cmake_minimum_required(VERSION 3.16)
include($ENV{IDF_PATH}/tools/cmake/project.cmake)
project(myproject)
和
idf_component_register(SRCS "main.c"
INCLUDE_DIRS ".")
我发现ESP_PLATFORM
是由Ninja脚本在调用编译器时定义的:
DEFINES = -DESP_PLATFORM
我还应该设置什么才能使 ESP_PLATFORM
也可用于
EVE_target.c
?
CMakeLists.txt
文件。请根据
ESP-IDF 构建系统组件文档
在您的
FT800-FT813-5.x
目录中添加 CMakeLists.txt 文件。这包含 idf_component_register()
调用,并将确保构建源文件并正确设置包含路径等。之后,需要将
main
组件的
CMakeLists.txt
文件中的调用更改为:
idf_component_register(SRCS "main.c"
INCLUDE_DIRS "."
PRIV_REQUIRES "FT800-FT813-5.x")
我还建议删除双components
目录,我不确定构建系统是否仍然可以识别当前结构中的组件。