是否可以指示Bazel使用单个命令更新N个目标?

时间:2016-05-11 17:28:47

标签: bazel

Google Bazel构建工具可以轻松解释特定目录树中的每个CoffeeScript文件是否需要编译为相应的输出JavaScript文件:

[genrule(
    name = 'compile-' + f,
    srcs = [f],
    outs = [f.replace('src/', 'static/').replace('.coffee', '.js')],
    cmd = 'coffee --compile --map --output $$(dirname $@) $<',
) for f in glob(['src/**/*.coffee'])]

但是,假设有100个CoffeeScript文件,这将分别调用coffee工具100次,为编译过程增加了几秒钟。相反,可以向Bazel解释coffee命令可以将许多输入文件作为输入,然后可以将文件批处理并提供给更少的coffee调用,从而允许进程的启动时间为分摊的文件多于一个文件。

有没有办法向Bazel解释可以同时使用多个文件调用coffee

1 个答案:

答案 0 :(得分:3)

我还没有使用咖啡脚本,所以可能需要调整(特别是--output @D部分),但这样的事情可能会有效:

coffee_files = glob(['src/**/*.coffee'])

genrule(
    name = 'compile-coffee-files',
    srcs = coffee_files,
    outs = [f.replace('src/', 'static/').replace('.coffee', '.js') for f in coffee_files],
    cmd = 'coffee --compile --map --output @D $(SRCS)' % coffee)

请注意,如果只更改了一个输入咖啡脚本文件,则将使用所有100个文件重新运行整个genrule(与带有100个输入java文件的java_library相同)。