【问题标题】:Copy a directory to a new directory in Bazel将目录复制到 Bazel 中的新目录
【发布时间】:2021-01-01 11:07:52
【问题描述】:

基本上我想要的只是cp -r src/ dist/,但由于某种原因,我根本无法让它工作。

目前我正在尝试:

filegroup(
    name = "src_files",
    srcs = glob([
        "src/**",
    ]),
)
filegroup(
    name = "dist_files",
    srcs = glob([
        "dist/**"
    ]),
)
genrule(
    name = "copy",
    srcs = ["//packages/variables:src_files"],
    outs = ["//packages/variables:dist_files"],
    cmd = "cp -R $(locations //packages/variables:src_files) $(locations //packages/variables:dist_files)"
)

我已经浏览了至少 4 页的 google 和文档,但似乎除非我创建一个 genrule 并在规则中手动指定所有 100 个文件,否则它不会起作用?

【问题讨论】:

  • 您打算通过副本实现什么目标?是否有特定的下游规则要提供这些作为输入?通常,您不需要单独复制规则中的文件;如果这是为了某种输出,那么您可能需要查看 rules_pkg 并生成一个 tar 球,然后在另一个步骤中将其解压缩到正确的目录位置。
  • @JamesSharpe 这正是我所需要的!谢谢,用解决方案更新帖子

标签: bazel bazel-rules skylark bazel-rules-nodejs


【解决方案1】:

@JamesSharpe 有我所缺少的,将 BUILD 文件更新为:

filegroup(
    name = "src_files",
    srcs = glob([
        "src/**",
    ]),
)
pkg_tar(
    name = "pack_srcs",
    extension = "tar.gz",
    srcs = [":src_files"],
)
genrule(
    name = "unpack_to_dist",
    srcs = [":pack_srcs"],
    outs = ["dist"],
    cmd = "mkdir $(RULEDIR)/dist && tar -C $(RULEDIR)/dist -zxvf $(SRCS)"
)

并且能够成功地将其传递给下游规则。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-03
    • 2019-11-01
    • 2020-12-10
    • 1970-01-01
    • 2022-01-21
    • 2011-07-12
    • 2012-07-24
    • 2014-07-18
    相关资源
    最近更新 更多