使用make清理过时的输出

时间:2016-02-04 22:37:55

标签: makefile

假设我有一个带有自动规则的make文件,如:

%.o: %.c
  gcc -c $(CFLAGS) $< -o $@

源文件a.c

int main() {}

正在运行make会产生a.o。现在,如果我将a.c重命名为b.c,然后再次运行make,则会生成b.o。当我删除a.c,而不删除所有其他.o文件时,有什么方法可以删除a.o吗?

例如,我是否可以通过某种方式提供与*.oa.o匹配的模式b.o,并从中删除所有生成/跳过的文件({{1}获得b.o

1 个答案:

答案 0 :(得分:3)

这样的事情应该有效(未经测试!)

ALL_OBJS := $(wildcard *.o)
WANTED_OBJS := $(addsuffix .o,$(basename $(wildcard *.c)))

.PHONY: clean-orphaned
clean-orphaned:
        @rm $(filter-out $(WANTED_OBJS),$(ALL_OBJS))

我会通过运行make -n clean-orphaned或将rm更改为echo并仔细检查要删除的对象来测试它。

就我个人而言,我不会为此烦恼,只需删除*.o并重建即可。你不太可能经常重命名文件,重建一切都是一个严重的问题。