"未声明的包含"在bazel中带有子目录中的标题

时间:2018-01-05 15:23:44

标签: bazel

我试图在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的方式解决了这个问题。

1 个答案:

答案 0 :(得分:0)

确保Third-Party/ArduinoJson的子目录中没有BUILD文件,否则Bazel会将这些文件视为包,glob将不会从中获取文件。

如果您在这些子目录中有BUILD文件,则需要在其中创建cc_library规则,在//Third-Party/ArduinoJson:ArduinoJson中导出所需的标头,并根据ArduinoJson中的这些cc_lib库。