-FinalLibDeps = $(PROJ_SRC_DIR)/FinalLibDeps.txt
-ifdef HAVE_PERL
-ifeq ($(HAVE_PERL),1)
-LibDeps = $(PROJ_SRC_DIR)/LibDeps.txt
-GenLibDeps = $(PROJ_SRC_ROOT)/utils/GenLibDeps.pl
-# MANUAL USE ONLY! GenLibDeps.pl is very non-portable, so LibDeps.txt
-# should only be re-built manually. No other rule in this file should
-# depend on LibDeps.txt.
-$(LibDeps): $(GenLibDeps) $(LibDir)
- $(Echo) "Regenerating LibDeps.txt"
- $(Verb) $(GenLibDeps) -flat $(LibDir) | sort > $(LibDeps)
+FinalLibDeps = $(PROJ_OBJ_DIR)/FinalLibDeps.txt
+LibDeps = $(PROJ_OBJ_DIR)/LibDeps.txt
+LibDepsTemp = $(PROJ_OBJ_DIR)/LibDeps.txt.tmp
+GenLibDeps = $(PROJ_SRC_ROOT)/utils/GenLibDeps.pl
+
+$(LibDepsTemp): $(GenLibDeps) $(LibDir) $(wildcard $(LibDir)/*.a $(LibDir)/*.o)
+ $(Echo) "Regenerating LibDeps.txt.tmp"
+ $(Verb) $(PERL) $(GenLibDeps) -flat $(LibDir) "$(NM_PATH)" > $(LibDepsTemp)
+
+$(LibDeps): $(LibDepsTemp)
+ $(Verb) $(CMP) -s $@ $< || ( $(CP) $< $@ && \
+ $(EchoCmd) Updated LibDeps.txt because dependencies changed )