Update.
When ARFLAGS is without U, the datetime of the object archive(member) is reset to zero. It renders the target being always outdated and rebuilds the target. $ ar -tv libfoo.a rw-r--r-- 0/0 78776 Jan 1 08:00 1970 foo.o $ When the ARFLAGS is with U, the timestamp is kept in archive(member) in the target. $ ar -tv libfoo.a rw-rw-r-- 1000/1000 78776 Jan 1 23:49 2025 foo.o $