我们正在使用Bazel来包装和组织我们用于项目的一些构建系统。因为,每个项目都有自己的构建系统(例如bitbake),我们不能将Bazel用于实际构建(例如创建包含所有源代码的cc_binary和cc_library规则)。但我们确实将它用于包装和制作API。
我想创建一个依赖于另一个shell脚本(B)的shell脚本(A),我想这样做,这样B将在A之前运行。因为我们在BUILD文件中有一些配置,我可以'只需从命令行B然后运行A.我需要Bazel这样做,并将配置注入两个脚本。类似的东西:
在一个组件的BUILD文件中:
sh_binary(
name = "bazel_build_multivisor",
srcs = ["bazel-build-multivisor.sh"],
data = ["wrkspceinfo"],
deps = ["//core-build/components/bazel-pull:bazel_pull_multivisor"])
在第二个组件的BUILD文件中,负责从git中提取:
sh_binary(
name = "bazel_pull_multivisor",
srcs = ["pull_repo_repository.sh"],
data = ["wrkspceinfo", "pull_repo_repository.sh"],
args = [ARGS, "NAME=multivisor_repo;MODULE_NAME=*;GIT_BRANCH=*;MANIFEST=*.xml;PULL_PARAMS=8,8,8"],)
意思是,我希望sh_binary规则依赖于不同的sh_binary规则。
这可能吗?这样做有更好的方法吗?
感谢。
答案 0 :(得分:0)
考虑使用genrule
。
您可以在genrule.tools
属性中指定两个sh_binary
目标,然后在genrule.cmd
属性中指定按顺序调用它们的shell命令。
例如,
genrule(
name = "pull_and_build",
srcs = "some_config_file.txt",
outs = ["built_project.tar.gz"]
tools = [":pull_sh", ":build_sh"],
cmd = """
$(location :pull_sh) $< | \
xargs -1 $(location :build_sh) | \
xargs -1 tar -czvf $@"""
)
另一种可能的方法是将依赖项sh_binary
换成sh_library
,然后将它们汇总到顶层sh_binary
。