如何使用“仅标头(.hpp)”库作为组件?

时间:2018-11-27 03:39:25

标签: esp32

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

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

的文件。

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

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之类的文件,例如here,但我无法设置为哪个选项使我可以编译。

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

1 个答案:

答案 0 :(得分:1)

包括任何头文件的方式相同-仅将#include包含在适当的.cpp文件中。如果您使用的是Makefile,请确保将.hpp文件的依赖项添加到.cpp文件生成的目标文件中,就像添加.h文件和{ {1}}文件。

不要尝试使用rxcpp作为组件。它并不是要作为库构建。就像仓库说的那样,它只是标头。您只需.c就可以在需要的地方使用它。