如何解决链接 expand_template 并在一个 bazel 规则中运行
我正在尝试编写一个自定义规则,我首先从模板生成一个文件,然后将此文件传递给脚本以生成一些 C++ 标头,这些标头是我的规则的输出。
addImgFunction(){
var dbs=firebase.database();
var stg=firebase.storage();
var inp=document.getElementById("add-img");
inp.onchange=lasted;
function lasted()
{
var fname=this.files[0];
var btns=stg.ref("Posts/"+ fname);
btns.put(fname);
}
}
这里,def _msg_library_impl(ctx):
# For each target in deps,print its label and files.
for source in enumerate(ctx.attr.srcs):
print("File = " + str(source))
out_header = ctx.actions.declare_file("some_header.hpp")
out_arguments = ctx.actions.declare_file("arguments.json")
ctx.actions.expand_template(
template = ctx.file._arguments_file,output = out_arguments,substitutions = {
"{output_dir}": out_header.dirname,"{idl_tuples}": out_header.path,},)
args = ctx.actions.args()
args.add("--arguments-file")
args.add(out_arguments)
ctx.actions.run(
outputs = [out_header],progress_message = "Generating headers '{}'".format(out_header.short_path),executable = ctx.executable._generator,arguments = [args],)
return [
CcInfo(compilation_context=cc_common.create_compilation_context(
includes=depset([out_header.dirname]),headers=depset([out_header])))
]
msg_library = rule(
implementation = _msg_library_impl,output_to_genfiles = True,attrs = {
"srcs": attr.label_list(allow_files = True),"outs": attr.output_list(),"_arguments_file": attr.label(
allow_single_file = [".json"],default = Label("//examples/generation_rule:arguments_template.json"),),"_generator": attr.label(
default = Label("//examples/generation_rule:generator"),executable = True,cfg = "exec"
),)
是一个 Python 库,它提供给 generator
的输入文件和参数文件生成头。
我面临的问题是,在调用 srcs
之前,expand_template
似乎并未实际运行,因此无法找到生成的文件。我在这里做错了什么?我误解了事情的运作方式吗?
解决方法
除了在参数中传递其路径之外,您还需要指明文件是操作的输入。将 ctx.actions.run 更改为:
ctx.actions.run(
outputs = [out_header],inputs = [out_arguments],progress_message = "Generating headers '{}'".format(out_header.short_path),executable = ctx.executable._generator,arguments = [args],)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。