gpt4 book ai didi

Bazel select() 基于构建配置

转载 作者:行者123 更新时间:2023-12-03 08:53:34 26 4
gpt4 key购买 nike

我试图根据用户是否运行 bazel test 或 bazel build 在编译时提供一些预处理器定义。

具体来说,我希望拥有 cc_library.deps 的条件依赖项和 cc_library.defines 中的条件定义。

我发现 select() 是可行的方法,但我不知道如何知道用户运行的操作。

最佳答案

我不知道有什么方法可以使用 build 检测当前命令( testselect() ) ,但我认为你可以通过 custom keys 实现类似的效果.

您可以定义 config_setting block 如下:

# BUILD
config_setting(
name = "custom",
values = {
"define": "enable_my_flag=true"
}
)

并在您的库中使用它来控制 defines :

# BUILD - continued
cc_library(
name = "mylib",
hdrs = ["mylib.h"],
srcs = ["mylib.cc"],
defines = select({
":custom": ["MY_FLAG"],
"//conditions:default": [],
})
)

现在使用 bazel build :mylib 构建库将导致默认情况 - 不存在任何定义,但如果您使用 bazel build :mylib --define enable_my_flag=true 进行构建然后将选择另一个分支并 MY_FLAG将被定义。

这可以轻松扩展到测试用例,例如通过添加 --define给您.bazelrc :

# .bazelrc
test --define enable_my_flag=true

现在每次运行 bazel test :mylib_test define将附加标志并使用 MY_FLAG 构建库已定义。

出于好奇,为什么要在使用不同的定义/依赖项构建的库上运行测试?这可能会违背测试的目的,因为最终您测试的内容与您要使用的库不同。

关于Bazel select() 基于构建配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57383035/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com