在Bazel中,可以使用以下方法在genrule
的命令中使用换行符:
$(echo)
命令生成换行符,然后将其传递给genrule
的命令。genrule(
name = "my_genrule",
srcs = ["input_file.txt"],
outs = ["output_file.txt"],
cmd = """
echo $(echo -e "Line 1\nLine 2") > $@
"""
)
$'\n'
语法来表示换行符。genrule(
name = "my_genrule",
srcs = ["input_file.txt"],
outs = ["output_file.txt"],
cmd = """
echo -e "Line 1$'\n'Line 2" > $@
"""
)
--workspace_status_command
选项,通过调用Python脚本来生成包含换行符的命令。在WORKSPACE
文件中定义一个新的genrule.bzl
文件,内容如下:
def generate_cmd(ctx):
return """
echo "Line 1"
echo "Line 2"
"""
genrule_cmd = repository_rule(
implementation = generate_cmd,
attrs = {
"out": attr.output(mandatory=True, allow_single_file=True),
},
)
然后,将此文件导入到BUILD文件中,并使用genrule_cmd
生成命令。
load("//:genrule.bzl", "genrule_cmd")
genrule(
name = "my_genrule",
srcs = ["input_file.txt"],
outs = ["output_file.txt"],
cmd = genrule_cmd,
)
这将调用genrule.bzl
中的generate_cmd
函数,并将其返回的命令作为genrule
的命令。函数中可以使用任意Python代码来生成命令,包括换行符的使用。