Makefile中的依赖关系是一个列表变量,但$<只取第一个依赖关系。

问题描述 投票:0回答:2

我有一些类似的文件,我想用makefile对其进行操作。所以我正在这样做。

INPUT  := $(wildcard *.png)
OUTPUT := $(INPUT:.png=.jpeg)

.PHONY: all

all: $(OUTPUT)

$(OUTPUT): $(INPUT)
    convert $< -resize 30x30 $@

我得到了正确的jpeg文件名,但所有文件中的图像都是一样的(第一个依赖关系)。

我知道使用 $< 仅指列表中的第一个依赖关系,而使用 $^ 给出了所有输出的deps。

有没有办法让dep1代表输出1,dep2代表输出2,以此类推?

bash makefile cmake gnu-make gnu
2个回答
1
投票

这样你就声明每个输出文件都依赖于每个输入文件。你应该使用一个模式规则来代替,即:.PHONY: $(OUTUT): $(...)。

$(OUTPUT): %.jpeg: %.png
    convert $< -resize 30x30 $@

1
投票

我会倾向于使用..:

%.jpeg: %.png
    convert $< -resize 30x30 $@

在任何情况下,你都不希望重新制作 当你的缩略图中的一个原始图像发生变化时,你的缩略图就会发生变化--它们各自只依赖于单个对应的png文件。

© www.soinside.com 2019 - 2024. All rights reserved.