我想编写一个 SConstruct 文件,它将(例如)目录中的所有 JPEG 文件转换为 PNG。
我认为我的 Builder 没问题:
ConvToPNG = Builder(action = 'convert $SOURCE $TARGET',
suffix = '.png',
src_suffix = '.jpg')
env['BUILDERS']['ConvToPNG'] = ConvToPNG
但是我不确定如何列出所有需要构建的目标。我可以像这样以 Python-y 的方式做到这一点:
pix_conversions = [env.ConvToPNG(jpg_src) for jpg_src in Glob('pix/img_*.jpg')]
然后也许我会为那些使用别名:
env.Alias('convert_all', pix_conversions)
或者手工制作一个节点并将其Depends
用于转换。
问题是,这似乎是扫描仪的目标。但我无法让它正常工作。我尝试制作一个可以在目录上工作的 Builder 并调用一个可以添加一堆目标的 Scanner,但它不起作用,因为 SCons 内部期望 Builder 可以在文件上运行。(或者至少,这是我从错误消息中收集到的)。
有没有更多的 SCons-y 方式来做到这一点?