在Bazel中,一个extra_action
的输出可以作为后续extra_action
的输入。下面是一个示例解决方法:
假设我们有两个extra_action
,其中一个生成一个文件,另一个读取该文件并执行一些操作。
首先,我们需要在BUILD
文件中定义这两个extra_action
:
load("@bazel_skylib//rules:extra_actions.bzl", "extra_action")
extra_action(
name = "generate_file",
toolfiles = ["@bazel_tools//tools/build_defs/pkg:pkg.bzl"],
cmd = "$(location //path/to:generate_file.sh) $(output_file)",
outouts = ["output_file"],
)
extra_action(
name = "process_file",
toolfiles = ["@bazel_tools//tools/build_defs/pkg:pkg.bzl"],
cmd = "$(location //path/to:process_file.sh) $(location :generate_file)",
inputs = ["generate_file"],
)
然后,我们需要编写generate_file.sh
和process_file.sh
两个脚本文件。
generate_file.sh
用于生成文件:
#!/bin/bash
# 获取文件输出路径
output_file=$1
# 在这里执行生成文件的操作,例如:
echo "Hello, World!" > $output_file
process_file.sh
用于读取文件并执行操作:
#!/bin/bash
# 获取生成的文件路径
file_path=$1
# 在这里执行读取文件并执行操作的操作,例如:
cat $file_path
最后,我们可以使用bazel run
命令运行这两个extra_action
:
bazel run :process_file
这将生成一个文件,并在控制台上打印出文件的内容。
注意:在实际项目中,你可能需要根据你的具体需求进行修改和调整。