我试图在C ++ bazel项目中使用ArduinoJson。它是一个仅头文件库,在src下的子目录中包含头文件。但我得到未声明的包含错误。
这就是//Third-Party/ArduinoJson
cc_library def的样子:
cc_library(
name = "ArduinoJson",
hdrs = glob(["5.12.0/src/**"]),
includes = [
"5.12.0/src",
"5.12.0/src/ArduinoJson",
],
visibility = ["//visibility:public"],
)
使用它的目标(序列化)确实其中有//Third-Party/ArduinoJson
deps
这是错误:
ERROR: /[...]/Serialization/BUILD:1:1: undeclared inclusion(s) in rule '//[...]/Serialization:Serialization':
this rule is missing dependency declarations for the following files included by '[...]/Serialization/JsonDeserializer.cpp':
'[...]/Third-Party/ArduinoJson/5.12.0/src/ArduinoJson/Data/Encoding.hpp'
'[...]/Third-Party/ArduinoJson/5.12.0/src/ArduinoJson/Serialization/FloatParts.hpp'
'[...]/Third-Party/ArduinoJson/5.12.0/src/ArduinoJson/Polyfills/math.hpp'
'[...]/Third-Party/ArduinoJson/5.12.0/src/ArduinoJson/TypeTraits/FloatTraits.hpp'
Target //[...]/Serialization:Serialization failed to build
因为它只抱怨src
的子目录中的文件,例如src/Data/Encoding.hpp
,我猜这可能与它有关吗?
这不是"How to resolve bazel “undeclared inclusion(s)” error?"的重复,因为通过执行我已经在使用deps的方式解决了这个问题。
答案 0 :(得分:0)
确保Third-Party/ArduinoJson
的子目录中没有BUILD文件,否则Bazel会将这些文件视为包,glob
将不会从中获取文件。
如果您在这些子目录中有BUILD文件,则需要在其中创建cc_library
规则,在//Third-Party/ArduinoJson:ArduinoJson
中导出所需的标头,并根据ArduinoJson中的这些cc_lib库。