Bazel:为测试目的而构建时包括替换项

问题描述 投票:0回答:1

我有一个模块A,其中包含某种特定于硬件的头文件Io.h。现在,我有一个不同的模块B,该模块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的依赖关系,而不是直接包含它,我还必须更改每个中间依赖关系。那不是我想做或可以做的。

build include bazel
1个回答
0
投票

我通过在目标规则B中使用select函数解决了这个问题:如果满足特定的config setting,则将替换Io.h:

在A /已建中

cc_library(
  name="StubLib",
  hdrs=["Io.h"],
  visibility=["["//visibility:public"],
)

内置/内置

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"],
)
© www.soinside.com 2019 - 2024. All rights reserved.