我們正在生成一些Go源文件作爲我們構建的一部分。之前我們使用了genrule
(example here),導致生成的文件存儲在bazel-genfiles/
中。如何將自定義規則的輸出放在`bazel-genfiles /`而不是`bazel-out /`中?
我們最近切換到使用rules_go
(https://github.com/bazelbuild/rules_go/tree/master/examples/bindata)中演示的自定義規則。此更改意味着輸出源文件存儲在bazel-bin/
而不是bazel-genfiles/
中。
輸出位置的這種變化已經打破了我們開發人員使用的一些IDE中的Go集成。值得注意的是,在bzl
(Bazel)查找模式下運行時,vim-go
和VSCode使用的自動補全引擎gocode
似乎預計會在bazel-genfiles/
而不是bazel-bin/
中找到生成的源,因此會失敗。
如何修改我的規則以將輸出保存到bazel-genfiles/
而不是bazel-bin/
?我的規則在rules_go
相當於例如:
def _bindata_impl(ctx):
out = ctx.new_file(ctx.label.name + ".go")
ctx.action(
inputs = ctx.files.srcs,
outputs = [out],
executable = ctx.file._bindata,
arguments = [
"-o", out.path,
"-pkg", ctx.attr.package,
"-prefix", ctx.label.package,
] + [src.path for src in ctx.files.srcs],
)
return [
DefaultInfo(
files = depset([out])
)
]
bindata = rule(
_bindata_impl,
attrs = {
"srcs": attr.label_list(allow_files = True, cfg = "data"),
"package": attr.string(mandatory=True),
"_bindata": attr.label(allow_files=True, single_file=True, default=Label("@com_github_jteeuwen_go_bindata//go-bindata:go-bindata")),
},
)
我期望的參數,可ctx.new_file
或ctx.action
卻找不到在雲雀參考或教程任何相關信息。
非常感謝!
完美,謝謝! – user2514169