如何在bazel中创建目录结构

GGh*_*Ghe 5 linux build squashfs bazel skylark

我想在bazel中创建以下结构。

dir1
   |_ file1
   |_ file2
   |_ dir2
         |_file3
Run Code Online (Sandbox Code Playgroud)

创建特定的结构似乎并不简单。我希望有一个简单且可重复使用的规则。就像是:

makedir(
  name = "dir1",
  path = "dir1",
)

makedir(
  name = "dir2",
  path = "dir1/dir2",
  deps = [":dir1"],
)
Run Code Online (Sandbox Code Playgroud)

我尝试过的

  • 我可以使用python脚本创建宏,但需要更干净的东西。
  • 我试图创建一个genrule有mkdir -p path/to/directoy没有工作

编辑

用例是我想使用bazel 创建一个squashfs

重要的是要注意,Bazel提供了一些打包功能。

创建squashfs,该命令需要一个由构件填充的目录结构。

GGh*_*Ghe 3

就我而言,我想创建一个目录结构并运行 mksquashfs 来生成一个 squashfs 文件。

为了实现这一点,我最终修改了bazel 的包装文档中的基本示例。

load("@bazel_tools//tools/build_defs/pkg:pkg.bzl", "pkg_tar")

genrule(
    name = "file1",
    outs = ["file1.txt"],
    cmd = "echo exampleText > $@",
)

pkg_tar(
    name = "dir1",
    strip_prefix = ".",
    package_dir = "/usr/bin",
    srcs = [":file1"],
    mode = "0755",
)

pkg_tar(
    name = "dir2",
    strip_prefix = ".",
    package_dir = "/usr/share",
    srcs = ["//main:file2.txt", "//main:file3.txt"],
    mode = "0644",
)

pkg_tar(
    name = "pkg",
    extension = "tar.gz",
    deps = [
        ":dir1",
        ":dir2",
    ],
)
Run Code Online (Sandbox Code Playgroud)

如果有一种更简单的方法来创建 tar 或目录结构而不需要中间 tar,我将给出最佳答案。