Bazel如何在依赖项中添加前缀?

时间:2020-08-18 12:29:17

标签: bazel

我有两个库libA和libB。

都有自己的BUILD文件。

libA.BUILD看起来像这样:

#libA.BUILD file

cc_library(
    name "libA_foo",
    srcs = ["foo.cc"],
    hdrs = ["foo.h"],
)

cc_library(
    name "libA_bar",
    srcs = ["bar.cc"],
    hdrs = ["bar.h"],
    deps = [":libA_foo"],
)

现在我想在libB的cc_library中包括一些libA标头

我可以那样做

#libB.BUILD file

cc_library(
    name "libB_qux",
    srcs = ["qux.cc"],
    hdrs = ["qux.h"],
    deps = ["@libA//:libA_foo"]
)

在qux.cc中,我想将libA_foo的标头包括为#include "libA/foo.h"而不是#include "foo.h"

我知道我可以在include_prefix = "libA"上添加一个libA_foo,但是这样会弄乱libA中其他库的包含内容,并且我不想对libA进行更改。

我可以在列出依赖项时以某种方式声明前缀吗?

1 个答案:

答案 0 :(得分:0)

尝试一下:

  1. 使用include_prefix将前缀添加到//libA:libA_foo的已导出标头中。
  2. foo.h的{​​{1}}中添加srcs,以便不带前缀就可以使用它们。
  3. 还要在//libA:libA_foo的{​​{1}}中添加foo.h

示例:

srcs

摘自//libA:libA_bar文档:

cc_library( name "libA_foo", srcs = ["foo.cc", "foo.h"], hdrs = ["foo.h"], include_prefix = "libA", ) cc_library( name "libA_bar", srcs = ["bar.cc", "foo.h"], hdrs = ["bar.h"], deps = [":libA_foo"], ) 文件不会被编译,但是可以被该规则中的源包含。 cc_library.h文件都可以直接包含这些.cc.h参数中列出的任何规则的srcs中列出的标头。

意思是,hdrs可以访问deps中的foo.h,而其他srcs中的libA_foo可以使用包括前缀。