在makefile中包含带通配符的目标文件all directive

时间:2017-04-12 10:11:06

标签: wildcard gnu-make

我认为这将是一个明智的选择,但我似乎无法弄明白。让我们说我想解压缩目录中的所有zip文件并将结果放在另一个目录中。所有文件都遵循模式region_*.zip,其中*是一些id。

raster/region_%.tif: zip/region_%.zip
    unzip -d raster $<

我的问题:如何在all指令中包含此操作?

# Does not work
all: raster_region_%.tif

1 个答案:

答案 0 :(得分:1)

始终从您要创建的目标开始向后工作,返回源文件(在本例中为zip文件)。

必须以某种方式告诉您要创建的目标是什么。它不能凭空而来直播。

在这种情况下,如果要为每个zip文件构建.tif文件,首先需要获取所有zip文件的列表,然后将它们转换为目标文件:

ZIPFILES := $(wildcard zip/region_*.zip)
TARGETS := $(patsubst zip/region_%.zip,raster/region_%.tif,$(ZIPFILES))

all: $(TARGETS)