我有一个模块A,其中包含某种特定于硬件的头文件Io.h。现在,我有一个不同的模块B,它依赖于A,但想用位于目录B中的存根文件替换模块A所需的头文件Io.h。
有没有办法将A的依赖关系“覆盖”到Io.h上以使用模块B给出的依赖关系?
WORKSPACE
|
|-A
|--A.c
|--Io.h
|-B
|--B.c
|--Io.h
我了解,在这种情况下,我可能应该生成两个目标A,一个取决于本地Io.h,一个取决于来自B的Io.h。但是,如果对Io.h的依赖关系是嵌套在A的依赖关系中而不是直接包含在其中,我还必须更改每个中间依赖关系。那不是我想做或可以做的。
答案 0 :(得分:0)
我通过在目标规则B中使用select函数解决了这个问题: 如果满足特定的config setting,则将替换Io.h:
在A /已构建
中cc_library(
name="StubLib",
hdrs=["Io.h"],
visibility=["["//visibility:public"],
)
在B / BUILD
cc_library(
name="B",
srcs=["B.c"],
hdrs=["B.c"],
deps=select({
"//conditions:default":[":io_h"],
"//custom_config":["//A:StubLib"],
}),
visibility=["["//visibility:public"],
)
cc_library(
name="io_h",
hdrs=["Io.h"],
)