diff --git a/src/Makefile.global.in b/src/Makefile.global.in
index 3bf658d6b0c879076722a7faf7f213aa9a4eabbc..26b2d5e4a9b8794955f5b531de61b7961cb10446 100644
--- a/src/Makefile.global.in
+++ b/src/Makefile.global.in
@@ -515,6 +515,12 @@ TAS         = @TAS@
 %.bz2: %
 	$(BZIP2) -c $< >$@
 
+# Direct builds of foo.c -> foo are disabled to avoid generating
+# *.dSYM junk on Macs.  All builds should normally go through the
+# foo.c -> foo.o -> foo steps.  This also ensures that dependency
+# tracking (see below) is used.
+%: %.c
+
 ifndef PGXS
 
 # Remake Makefile.global from Makefile.global.in if the latter
diff --git a/src/interfaces/ecpg/test/Makefile.regress b/src/interfaces/ecpg/test/Makefile.regress
index b2417081ee080c8217e30d9e8b5c3691497f8103..edfece07df6dbd8dd73680ca672ce2ff0cae2ab6 100644
--- a/src/interfaces/ecpg/test/Makefile.regress
+++ b/src/interfaces/ecpg/test/Makefile.regress
@@ -7,9 +7,8 @@ override LIBS := -lecpg -lpgtypes $(filter -l%, $(libpq)) $(LIBS) $(PTHREAD_LIBS
 
 ECPG = ../../preproc/ecpg --regression -I$(srcdir)/../../include
 
-%: %.c
-	$(CC) $(CPPFLAGS) $(CFLAGS) -c $< -o $*.o
-	$(CC) $(CPPFLAGS) $(CFLAGS) $*.o $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@
+%: %.o
+	$(CC) $(CFLAGS) $< $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@
 
 %.c: %.pgc ../regression.h
 	$(ECPG) -o $@ -I$(srcdir) $<