我正在尝试包含一个库,该库使用诸如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是否是个好主意,但我很好奇它是否还能工作:)
答案 0 :(得分:1)
包括任何头文件的方式相同-仅将#include
包含在适当的.cpp
文件中。如果您使用的是Makefile,请确保将.hpp
文件的依赖项添加到.cpp
文件生成的目标文件中,就像添加.h
文件和{ {1}}文件。
不要尝试使用rxcpp作为组件。它并不是要作为库构建。就像仓库说的那样,它只是标头。您只需.c
就可以在需要的地方使用它。