Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Makefile 是否可以使用make删除过时的目标_Makefile_Obsolete - Fatal编程技术网

Makefile 是否可以使用make删除过时的目标

Makefile 是否可以使用make删除过时的目标,makefile,obsolete,Makefile,Obsolete,我使用make从图像文件创建缩略图,这些图像文件将反过来用于创建网页 有时我删除一个源图像,我想缩略图被自动删除。显而易见的方法是简单地添加一个规则,其中交换了目标和先决条件,但这会导致循环引用和如下消息: make[2]:Circular image123.jpg首先,让我们设置一个规则来构建缩略图: images := $(wildcard *.jpg) TARGETS := $(addprefix thumbnails/, $(images)) .PHONY: all all : $(T

我使用make从图像文件创建缩略图,这些图像文件将反过来用于创建网页

有时我删除一个源图像,我想缩略图被自动删除。显而易见的方法是简单地添加一个规则,其中交换了目标和先决条件,但这会导致循环引用和如下消息:


make[2]:Circular image123.jpg首先,让我们设置一个规则来构建缩略图:

images := $(wildcard *.jpg)
TARGETS := $(addprefix thumbnails/, $(images))

.PHONY: all
all : $(TARGETS)

thumbnails/%.jpg: %.jpg
    create the thumbnail somehow
thumbnails := $(wildcard thumbnails/*.jpg)
OBSOLETE := $(filter-out $(TARGETS), $(thumbnails))
然后添加一些代码以查找过时的缩略图:

images := $(wildcard *.jpg)
TARGETS := $(addprefix thumbnails/, $(images))

.PHONY: all
all : $(TARGETS)

thumbnails/%.jpg: %.jpg
    create the thumbnail somehow
thumbnails := $(wildcard thumbnails/*.jpg)
OBSOLETE := $(filter-out $(TARGETS), $(thumbnails))
然后编写一条规则来删除它们:

.PHONY: purge
purge:
    rm $(OBSOLETE)
如果没有过时的缩略图,这将导致问题,因此让我们将配方包装在条件中:

purge:
ifneq ($(OBSOLETE),)
    rm $(OBSOLETE)
endif
最后将
purge
作为
all
的先决条件:

all : $(TARGETS) purge

谢谢,这很好用,但我有一个问题:使用:=代替=有什么区别吗?我试过有结肠和没有结肠的情况下,没有发现行为上的任何区别。默认情况下应该使用哪一个?请阅读此处的区别:简而言之,在这种特定情况下,行为是相同的,但是
=
版本做的工作更多。然而,在这样一个小例子中,差异是无法测量的。