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

Build Bazel:为测试目的而构建时,替换包括,build,include,bazel,Build,Include,Bazel,我有一个模块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的依赖关系中,而不是直接

我有一个模块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的依赖关系中,而不是直接包含,那么我也必须更改每个中间依赖关系。这不是我想做或能做的。

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

在A/BUILD中

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"],
)