Bazel:genrule触摸(创建)两个文件
我正在尝试创建一个既适用于windows又适用于unix的genrule,如果它们还不存在,它将创建两个文件 对于单个文件,以下操作有效:Bazel:genrule触摸(创建)两个文件,bazel,Bazel,我正在尝试创建一个既适用于windows又适用于unix的genrule,如果它们还不存在,它将创建两个文件 对于单个文件,以下操作有效: genrule( name = "create_files", outs = ["path/file1.h"], cmd_bat = "echo. >> $@", cmd = "touch $@", ) 但现在我想创建两个文件,以下文件似乎不起作用: genrule( name = "create_files", out
genrule(
name = "create_files",
outs = ["path/file1.h"],
cmd_bat = "echo. >> $@",
cmd = "touch $@",
)
但现在我想创建两个文件,以下文件似乎不起作用:
genrule(
name = "create_files",
outs = ["path/file1.h",
"path/file2.h"],
cmd_bat = "echo. >> $(OUTS)[0] && echo. >> $(OUTS)[1]",
cmd = "touch $(OUTS)[0] && touch $(OUTS)[1]",
)
我发现了错误
declared output '...path/file2.h' was not created by genrule.
如何才能正确地做到这一点?问题在于变量替换的工作方式以及数组在shell中的工作方式 在 cmd=touch$OUTS[0]&touch$OUTS[1] Bazel将$out替换为输出文件的路径,使用空格作为分隔符。看 因此,命令变为 触摸路径/file1.h路径/file2.h[0]&触摸路径/file1.h路径/file2.h[1] 因此,您将两次接触path/file1.h和两个无关的文件 要实现这一目标,您只需: cmd=触碰$OUTS 不过,我不知道如何在Windows上为cmd_bat执行此操作。我不知道有什么内置工具可以像touch那样创建多个空文件。您可能需要循环$OUTS并键入NUL>file或类似的内容。我想在执行cmd批处理时,可以在$OUTS中运行多个项目。