Bazel 将输出文件重命名为其他包

Bazel 将输出文件重命名为其他包,bazel,Bazel,我有一个标签//foo\u base:bar,它生成一个foo\u base/bar\u 0\u 8\u 9.tar。 现在我还需要将其作为foo_concrete/bar.tar(在包//foo_concrete中) 这应该可以通过编写一些不复制文件的操作来实现。但这似乎有些过分。有更优雅的解决方案吗?您可以使用genrule创建符号链接: genrule( name = "make_bar_tar", srcs = ["//foo_base:bar"], outs =

我有一个标签
//foo\u base:bar
,它生成一个
foo\u base/bar\u 0\u 8\u 9.tar
。 现在我还需要将其作为
foo_concrete/bar.tar
(在包
//foo_concrete
中)


这应该可以通过编写一些不复制文件的操作来实现。但这似乎有些过分。有更优雅的解决方案吗?

您可以使用genrule创建符号链接:

genrule(
    name = "make_bar_tar",
    srcs = ["//foo_base:bar"],
    outs = ["bar.tar"],
    cmd = "ln -s $(location //foo_base:bar) $@")

您可以使用genrule创建符号链接:

genrule(
    name = "make_bar_tar",
    srcs = ["//foo_base:bar"],
    outs = ["bar.tar"],
    cmd = "ln -s $(location //foo_base:bar) $@")

问题是a,这是否可以做更多的平台无关性,b,这是否会造成问题,因为
bar的时间戳。tar
将始终匹配
//foo_base:bar
。复制文件可能是使其跨平台的唯一简单方法。但是,如果您担心时间戳,那么复制文件会更糟糕:那么时间戳总是不同的。我认为最简单的事情是不依赖时间戳,时间戳并不重要。Bazel检测是否更改了
//foo_base:bar
,并将重建
make_bar_tar
,从而根据需要在下一次构建中重建
bar.tar
。问题是a,这是否可以做得更为平台无关,b,由于
bar.tar
的时间戳始终匹配
//foo\u base:bar
,因此这是否会产生问题。复制文件可能是使其跨平台的唯一简单方法。但是,如果您担心时间戳,那么复制文件会更糟糕:那么时间戳总是不同的。我认为最简单的事情是不依赖时间戳,时间戳并不重要。Bazel检测是否更改了
//foo_base:bar
,并将根据需要在下一次构建中重建
make_bar_tar
,从而重建
bar.tar