【发布时间】:2010-02-14 16:22:38
【问题描述】:
我想编写一个 SConstruct 文件,它将(例如)目录中的所有 JPEG 文件转换为 PNG。
我认为我的 Builder 没问题:
ConvToPNG = Builder(action = 'convert $SOURCE $TARGET',
suffix = '.png',
src_suffix = '.jpg')
env['BUILDERS']['ConvToPNG'] = ConvToPNG
但是我不确定如何列出所有需要构建的目标。我可以像这样以 Python 的方式做到这一点:
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 方式来做到这一点?
【问题讨论】:
-
你这样做是为了好玩吗?如果不看转换,ImageMagick 工具 (www.imagemagick.org)
-
只是一个更新:SCons 做得很好,但是一旦我尝试在我们的真实数据上运行它,在各种目录中可能有 50,000 张图像,SCons 开始花费大约半个小时来考虑要转换哪些图像。所以我切换到
make,一切都很好...... sigh