diff --git a/src/port/Makefile b/src/port/Makefile
index 0225b397a3080cae4d2c8ad4cb6babdadeebf147..bace576d80356da0a1077b5c82303ff36cc530b1 100644
--- a/src/port/Makefile
+++ b/src/port/Makefile
@@ -62,7 +62,14 @@ thread.o: CFLAGS+=$(PTHREAD_CFLAGS)
 libpgport_srv.a: $(OBJS_SRV)
 	$(AR) $(AROPT) $@ $^
 
-%_srv.o: %.c
+# Because this uses its own compilation rule, it doesn't use the
+# dependency tracking logic from Makefile.global.  To make sure that
+# dependency tracking works anyway for the *_srv.o files, depend on
+# their *.o siblings as well, which do have proper dependencies.  It's
+# a hack that might fail someday if there is a *_srv.o without a
+# corresponding *.o, but it works for now (and those would probably go
+# into src/backend/port/ anyway).
+%_srv.o: %.c %.o
 	$(CC) $(CFLAGS) $(subst -DFRONTEND,, $(CPPFLAGS)) -c $< -o $@
 
 $(OBJS_SRV): | submake-errcodes