首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将选择对象与bazel中的列表相一致

如何将选择对象与bazel中的列表相一致
EN

Stack Overflow用户
提问于 2021-08-26 15:59:27
回答 1查看 196关注 0票数 0

我有一个bazel目标,它的属性必须是列表。

但是,我需要根据select的结果有选择地将元素添加到列表中。

代码语言:javascript
运行
复制
glob_tests(
    # some stuff
    exclude = [
        "a.foo",
    ] + if_A([
        "x.foo",
    ]) + if_B([
        "y.foo",
    ]),
)

在上面的代码片段中,函数if_A和if_B返回select对象。

但是,当我按原样运行时,我会得到一个错误,说明需要一个序列对象,但是却遇到了一个select对象。

如何将select对象转换为序列对象?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-26 23:26:41

(我假设glob_test是一个调用内置函数glob的宏。)全局值是在加载BUILD文件时计算的,这是在已知任何配置之前。这意味着glob不能将任何select对象作为输入,因为不存在将select对象转换为列表的知识。

解决这一问题的方法是像这样将select调用放在全局之上

代码语言:javascript
运行
复制
some_test(
   name = "some_test",
   srcs = select({
       "//cond1": glob(["t*", "s*"], exclude=["thing"]),
       "//cond2": glob(["t*", "s*"], exclude=["something else"]),
   }),
)

而不是

代码语言:javascript
运行
复制
some_test(
   name = "some_test",
   srcs = glob(
       ["t*", "s*"],
       exclude=select({
           "//cond1": ["thing"],
           "//cond2": ["something else"],
       }),
   ),
)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68941841

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档