我想将文件从源目录复制到目标目录。我想避免复制未更改的文件。因此,我正在尝试利用 make 功能来检查带有%.:%.
规则的较新文件。
现在,在这种情况下,源和目标 EXTENSION 是相同的。其他地方有目标文件,但图形资产没有。
我make
用来复制图像。
TARGET := target
SOURCE := source
GRAPHICS := $(foreach dir,$(SOURCE), $(wildcard $(dir)/*.jpg ) $(wildcard $(dir)/**/*.jpg ) $(wildcard $(dir)/*.png ) $(wildcard $(dir)/**/*.png ) $(wildcard $(dir)/*.gif ) $(wildcard $(dir)/**/*.gif ) )
JPG = $(GRAPHICS:.jpg=.tmp)
PNG = $(GRAPHICS:.png=.tmp)
GIF = $(GRAPHICS:.gif=.tmp)
然后使用以下规则将文件复制到目标目录:
%.tmp:%.jpg
find $< | cpio -p -d -v $(TARGET)
问题
- 是否可以在此处字符串替换目标目录
- 从而使用 make newer 功能?
我试过了
JPG = $(GRAPHICS:$(TARGET).jpg=.tmp)
但这失败了No rule to make target
。是否只能比较同一目录中的源和对象?
可以制定一条规则,使源和对象是相同的扩展吗?
%.jpg:%.jpg
我能想到的最接近的是:
$(TARGET)%.jpg:%.jpg
但这永远不会运行。即使在清洁之后。