在 .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
我可以在文档、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