如何删除makefile中的中间对象文件

时间:2015-10-20 00:47:00

标签: c makefile

我想知道在以正确的方式构建库之后如何强制make删除.o文件。

all: libtest.a

libtest.a: foo.o bar.o
    ar r $@ $?

%.o : %.c
    gcc -o $@ -c $<

将.o文件标记为.INTERMEDIATE的问题是,即使一个源文件发生更改,所有.o文件也会被重新编译,即使它们已存在于存档中。有没有办法实现这一目标。删除目标文件,不重新编译未更改的源文件以更新库。

2 个答案:

答案 0 :(得分:0)

是否会将ar行更改为ar r $@ $? && rm *.o(或类似作品?

答案 1 :(得分:0)

如果foo.c已更改,则libtest.a已过期,因此必须重建foo.o,然后libtest.a。但bar.o也是libtest.a的先决条件,因此在libtest.a出现之前,Make无法执行bar.o规则,因此它也会重建bar.o

最好的解决方案(我知道)是将库视为一组独立目标:

.PHONY: all
all: libtest.a(foo.o bar.o)

libtest.a(%.o): %.o
    ar r libtest.a $^

(Make可以通过这种方式处理存档成员,但即使它不能,我们仍然可以将这种方法用于一些虚假的目标。)