我试图根据用户是否运行bazel test或bazel build.
具体来说,我想要 a 的条件依赖cc_library.deps和 中的条件定义cc_library.defines。
我发现这select()是要走的路,但我不知道如何知道用户运行什么操作。
我不知道有什么方法可以使用 来检测当前命令(buildvs test) ,但我认为您可以使用自定义键select()实现类似的功能。
您可以定义config_setting如下所示的块:
# BUILD
config_setting(
name = "custom",
values = {
"define": "enable_my_flag=true"
}
)
Run Code Online (Sandbox Code Playgroud)
并在您的库中使用它来控制defines:
# BUILD - continued
cc_library(
name = "mylib",
hdrs = ["mylib.h"],
srcs = ["mylib.cc"],
defines = select({
":custom": ["MY_FLAG"],
"//conditions:default": [],
})
)
Run Code Online (Sandbox Code Playgroud)
现在使用构建库bazel build :mylib将导致默认情况 - 不存在任何定义,但如果使用构建,则将选择并定义bazel build :mylib --define enable_my_flag=true另一个分支。MY_FLAG
这可以轻松扩展到测试用例,例如通过将以下添加--define到您的.bazelrc:
# .bazelrc
test --define enable_my_flag=true
Run Code Online (Sandbox Code Playgroud)
现在,每次运行时都会附加标志,并且将使用已定义的方式构建bazel test :mylib_test库。defineMY_FLAG
出于好奇,为什么要在使用一组不同的定义/依赖项构建的库上运行测试?这可能会违背测试的目的,因为最终您要测试的内容与您要使用的库不同。
| 归档时间: |
|
| 查看次数: |
8076 次 |
| 最近记录: |