我有一个bazel目标,它的属性必须是列表。
但是,我需要根据select的结果有选择地将元素添加到列表中。
glob_tests(
# some stuff
exclude = [
"a.foo",
] + if_A([
"x.foo",
]) + if_B([
"y.foo",
]),
)
在上面的代码片段中,函数if_A和if_B返回select对象。
但是,当我按原样运行时,我会得到一个错误,说明需要一个序列对象,但是却遇到了一个select对象。
如何将select对象转换为序列对象?
发布于 2021-08-26 15:26:41
(我假设glob_test
是一个调用内置函数glob
的宏。)全局值是在加载BUILD
文件时计算的,这是在已知任何配置之前。这意味着glob
不能将任何select
对象作为输入,因为不存在将select
对象转换为列表的知识。
解决这一问题的方法是像这样将select
调用放在全局之上
some_test(
name = "some_test",
srcs = select({
"//cond1": glob(["t*", "s*"], exclude=["thing"]),
"//cond2": glob(["t*", "s*"], exclude=["something else"]),
}),
)
而不是
some_test(
name = "some_test",
srcs = glob(
["t*", "s*"],
exclude=select({
"//cond1": ["thing"],
"//cond2": ["something else"],
}),
),
)
https://stackoverflow.com/questions/68941841
复制相似问题