假设我有一个带有自动规则的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
吗?
例如,我是否可以通过某种方式提供与*.o
和a.o
匹配的模式b.o
,并从中删除所有生成/跳过的文件({{1}获得b.o
?
答案 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
并重建即可。你不太可能经常重命名文件,重建一切都是一个严重的问题。