Hi community,
I try to follow make manual sec. 11.3 to build static archive library. When I delete a source file and its object file and run make to build the archive again, the deleted object remains in the archive. Should not the archive have less members when it is built from less objects? I add ` rm -f $@ ` in the recipe but do not know if it is the right solution. Thanks. ~(%): % ; ~%.a: ~ rm -f $@ ~ $(AR) $(ARFLAGS) $@ $? ~lib$(target).a: lib$(target).a($(patsubst %$(ext),%.o,$(wildcard *$(ext)))) test: $ make -C src cc -Wall -Wextra -fPIC -O3 -MMD -MP -c -o foo.o foo.c cc -Wall -Wextra -fPIC -O3 -MMD -MP -c -o bar.o bar.c cc -shared -Wl,-soname,libfoo.so.1 foo.o bar.o -o foo cp foo libfoo.so.1.2.3 ln -fs libfoo.so.1.2.3 libfoo.so.1 ln -fs libfoo.so.1 libfoo.so rm -f libfoo.a ar rvU libfoo.a bar.o foo.o ar: creating libfoo.a a - bar.o a - foo.o cc -Wall -Wextra -O3 -MMD -MP -I../foo -c -o main.o main.c cc -L../foo -Wl,-rpath,'$ORIGIN/../foo:$ORIGIN/../lib' main.o -lfoo -o main $ $ ar -tv src/foo/libfoo.a rw-rw-r-- 1000/1000 1640 Feb 10 10:58 2026 bar.o rw-rw-r-- 1000/1000 1640 Feb 10 10:58 2026 foo.o $ $ rm src/foo/bar.o src/foo/bar.d $ mv src/foo/bar.c src/foo/bar-c $ touch src/foo/foo.h $ make -C src cc -Wall -Wextra -fPIC -O3 -MMD -MP -c -o foo.o foo.c cc -shared -Wl,-soname,libfoo.so.1 foo.o -o foo cp foo libfoo.so.1.2.3 ln -fs libfoo.so.1.2.3 libfoo.so.1 ln -fs libfoo.so.1 libfoo.so rm -f libfoo.a ar rvU libfoo.a foo.o ar: creating libfoo.a a - foo.o cc -Wall -Wextra -O3 -MMD -MP -I../foo -c -o main.o main.c main.c: In function ??main??: main.c:11:10: warning: unused variable ??ret?? [-Wunused-variable] 11 | bool ret = add(a, b, &sum); | ^~~ cc -L../foo -Wl,-rpath,'$ORIGIN/../foo:$ORIGIN/../lib' main.o -lfoo -o main $ $ ar -tv src/foo/libfoo.a rw-rw-r-- 1000/1000 1640 Feb 10 10:58 2026 foo.o $ $ make --version GNU Make 4.4.1 $
