1

我想使用GNU make来自动化批处理文件处理,在我的特殊情况下,我有大量的图像文件,我想将色彩空间转换并重新编码为自定义文件格式。文件格式编码器只接受命令行上的文件名,即不接受 stdio 重定向。

我的文件和目录结构是

./sourceimages/*.tif
./destimages/*.mie
./Makefile

我写了一个带有模式规则的 Peliminary Makefile

%.mie : %.tif
    tmpraw := $(shell mktemp --suffix=raw)
    convert $< -colorspace YUV -resize …x… rgb:$(tmpraw)
    miecoder $(tmpraw) $@
    rm $(tmpraw)

但是现在我被卡住了,因为我不知道如何使make将所有文件sourceimages作为destimages. 那么我该怎么做呢?

我真的很想使用make来利用它的并行执行能力。

4

1 回答 1

1

首先,您使用mktemp创建唯一的临时文件名是不必要的,并且会导致其他问题;如果您要转换foo.tiffoo.mie,我们只需调用临时文件foo_temp.tif.

%.mie : %.tif
    convert $< -colorspace YUV -resize …x… rgb:$*_temp.tif
    miecoder $*_temp.tif $@
    rm $*_temp.tif

接下来,我们输入路径,以便 Make 可以使用另一个地方的先决条件在一个地方构建目标:

destimages/%.mie : sourceimages/%.tif
    convert $< -colorspace YUV -resize …x… rgb:$*_temp.tif
    miecoder $*_temp.tif $@
    rm $*_temp.tif

最后,我们寻找来源,推断出所需目标的列表,然后使它们成为默认目标的先决条件(将所有这些放在destimages/%.mie:...makefile 中的规则之上):

SOURCES := $(wildcard sourceimages/%.tif)
TARGETS = $(patsubst sourceimages/%.tif, destimages/%.mie, $(SOURCES))

.PHONY: all
all: $(TARGETS)
于 2013-02-01T21:32:25.127 回答