在 .bzl 文件中使用 genrule 时出现 "name 'genrule' is not defined (did you mean 'rule'?)" 错误

Getting "name 'genrule' is not defined (did you mean 'rule'?)" error when using genrule in .bzl files

我可以在文档、SO 问题、github 等处看到人们在没有任何直接的 load 语句的情况下使用 genrule,但是当我尝试在任何 .bzl 文件,我收到以下错误,我找不到解决方法:

name 'genrule' is not defined (did you mean 'rule'?)

我试过这样称呼它:

genrule(
    name = "hello20s",
    outs = ["hello20s.txt"],
    cmd_bash = "sleep 20 && echo 'hello20s' >$@",
)

并且我尝试用 cmd 替换 cmd_bash 但也没有成功。我认为这不是调用它的方式或参数的问题,而是更多的负载或环境问题。有什么想法吗?

我可以补充一点,我可以在同一个 .bzl 文件中使用 ctx.actions.run_shell 运行 类似的命令,所以到目前为止我遇到的唯一问题是它没有'具体识别genrule

$ bazel 版本

Bazelisk version: development

Build label: 5.1.1

OS: macOS 12.3.1

.bzl 文件中定义的宏中,“内置”规则和函数需要使用 native 前缀引用,例如 native.genrule.

但是,不能在另一个规则实现函数的上下文中调用规则,仅在提到调用时提及这一点 ctx.actions.shell