我们正在生成许多Go源文件,作为构建的一部分。之前我们使用了genrule
(example here),这导致生成的文件存储在bazel-genfiles/
中。
我们最近切换为使用rules_go
(https://github.com/bazelbuild/rules_go/tree/master/examples/bindata)中演示的自定义规则。此更改意味着输出源文件存储在bazel-bin/
而不是bazel-genfiles/
。
输出位置的这种变化打破了我们开发人员使用的一些IDE中的Go集成。值得注意的是,vim-go
,bzl
和VSCode使用的自动完成引擎,在bazel-genfiles/
(Bazel)查找模式下运行时似乎希望在bazel-bin/
中找到生成的源,而不是bazel-genfiles/
{1}},因此失败。
如何修改规则以将输出保存到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")),
},
)
中的示例:
Dim con As Object
Dim rs As Object
Dim cmd As Object
Dim query As String
Set con = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")
Set cmd = CreateObject("ADODB.Command")
col = 2
strcon = "Provider=OraOLEDB.Oracle;" _
& "Data Source= (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = SERVER_IP)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl.Multi-Act.Local))); " _
& "Initial Catalog=DatabaseName;" _
& "Trusted_connection=yes"
con.Open (strcon)
我希望对gocode
或ctx.new_file
提出论据,但在Skylark参考或教程中找不到任何相关内容。
非常感谢!
答案 0 :(得分:6)
尝试在output_to_genfiles=True
定义中设置rule()
。它在rule docs中提到。
所以:
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")),
},
output_to_genfiles = True,
)