首页 > 解决方案 > 如何将“仅标头 (.hpp)”库用作组件?

问题描述

我正在尝试包含一个使用诸如 blah.hpp 之类的文件作为“组件”的库,并使用 esp32 idf 编译它们。

我在项目中创建了组件子目录,并将库复制到组件目录的子目录中。如果我使用样板component.mk文件,编译器看不到带有 .hpp 后缀的文件。如果我将文件重命名为blah.hpp编译blah.cpp器确实会看到该blah.cpp文件,那么它只是看不到带有.hpp后缀的文件

我尝试在 component.mk 文件中添加以下内容(我在此处注意到),但随后出现以下错误。

make[1]: *** No rule to make target '/home/john/development/esp/ble_test2/components/rxcpp/./rx-sources.o', needed by 'librxcpp.a'.  Stop.

这是我正在尝试使用的 component.mk 文件(带有我上面提到的添加行)。

#
# Main component makefile.
#
# This Makefile can be left empty. By default, it will take the sources in the 
# src/ directory, compile them and link them into lib(subdirectory_name).a 
# in the build directory. This behaviour is entirely configurable,
# please read the ESP-IDF documents if you need to do this.
COMPONENT_ADD_INCLUDEDIRS=.
COMPONENT_OBJS += $(foreach compsrcdir,$(COMPONENT_SRCDIRS),$(patsubst %.hpp,%.o,$(wildcard $(COMPONENT_PATH)/$(compsrcdir)/*.hpp)))

## Uncomment the following line to enable exception handling 
CXXFLAGS+=-fexceptions
CXXFLAGS+= -std=c++11

这似乎是一件很容易解决的事情,我确实看到 esp32 idf 中的组件也使用诸如 blah.hpp 之类的文件,例如这里,但我无法设置我需要设置的选项以使我的编译。

顺便说一句,不确定在 esp32 上尝试使用 rxcpp 是否是个好主意,但我很好奇它是否能工作:)

标签: esp32

解决方案


与包含任何头文件的方式相同 - 只需#include将其放在适当的.cpp文件中即可。如果您使用的是 Makefile,请确保将对该文件的依赖项添加.hpp到该文件生成的目标文件中,.cpp就像您添加一个.h文件和一个.c文件一样。

不要尝试使用 rxcpp 作为组件。它不应该被构建为一个库。就像回购所说的那样,它只是标题。你只是#include在你需要的地方。


推荐阅读