【发布时间】:2019-11-15 09:00:21
【问题描述】:
我已自动生成 .cc 源和运行 .cc 生成器的 Starlark 规则:
BUILD文件:
generate_cc(
name = "foo_generated"
) # runs an executable that generates foo.h, foo.cc
我希望上面的foo_generated 也可以作为cc_library,这样它就可以成为后续cc_library 的有效依赖:
cc_library(
name = "bar",
deps = [":foo_generated"] # foo_generated used like a cc_library()
)
generate_cc 是否可以在没有宏的情况下在单个规则中实现,以便 generate_cc 类型的目标可以像其他 cc_library 的部门一样工作?
(我意识到 generate_cc 可能是一个调用实际规则然后调用cc_library 规则的宏,从而创建两个单独的目标/标签 - 这是我想避免的)。
如果一个规则实现可以调用另一个规则,那么generate_cc的实现可以
- 将它生成的源代码包装在
cc_library中 - 返回
cc_library返回的CcInfo提供程序
如(假设的.bzl 文件):
def generate_cc_impl(ctx):
# generate .h, .cc files
# ...
cc_info = native.cc_library(...) # wrap .h, .cc files
return cc_info
但我想从另一个规则调用一个规则是不可能的?
【问题讨论】:
标签: bazel