我有两个库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进行更改。
我可以在列出依赖项时以某种方式声明前缀吗?
答案 0 :(得分:0)
尝试一下:
include_prefix
将前缀添加到//libA:libA_foo
的已导出标头中。foo.h
的{{1}}中添加srcs
,以便不带前缀就可以使用它们。//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
可以使用包括前缀。