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. 使用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",hdrs = ["bar.h"],deps = [":libA_foo"],) 文件不会被编译,但是可以被该规则中的源包含。 cc_library.h文件都可以直接包含这些.cc.h参数中列出的任何规则的srcs中列出的标头。

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

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...