我想知道如何强制make以正确的方式构建库后删除.o文件。如何删除makefile中的中间目标文件
all: libtest.a
libtest.a: foo.o bar.o
ar r [email protected] $?
%.o : %.c
gcc -o [email protected] -c $<
与.o文件标记为.INTERMEDIATE
的问题是,所有的.o文件被重新编译,即使有一个源文件的更改,即使它们已经存在于档案。有没有办法做到这一点。删除目标文件并不重新编译未更改的源文件以更新库。
据我所知,如果你删除所有的.o的编译后库中,即使只有一个源文件发生更改,也需要再次创建它们才能再次编译库。 – dietbacon
但更新库时不需要未更改的对象文件。假设.o文件没有被删除,只有foo.c发生了变化。然后,可以使用简单的“ar libtest.a foo.o”更新库。 bar.o甚至不需要。但是,如果bar.o丢失,它会重新编译它。 – user1353535
他们是需要的,但是因为他们根本没有改变,所以你不必再创建它们,只需要改变它们。它是这样的:检查哪些更改,重新创建.o为所有.o's并创建库 – dietbacon