diff --git a/src/pl/plpython/Makefile b/src/pl/plpython/Makefile
index 647b4b1b96fc759f99bd60c6bfebd55eddbc60ca..7680d49cb6997d5533a4f265e841e4f01d7d3a1a 100644
--- a/src/pl/plpython/Makefile
+++ b/src/pl/plpython/Makefile
@@ -95,7 +95,9 @@ REGRESS_PLPYTHON3_MANGLE := $(REGRESS)
 
 include $(top_srcdir)/src/Makefile.shlib
 
-all: submake-generated-headers all-lib
+all: all-lib
+
+$(OBJS): | submake-generated-headers
 
 
 install: all install-lib install-data
diff --git a/src/test/regress/GNUmakefile b/src/test/regress/GNUmakefile
index 6a275cb729c255b384a7498fe037d42b292fbe43..469b0937a23258eaf9b03d7ef68a9815a4b96734 100644
--- a/src/test/regress/GNUmakefile
+++ b/src/test/regress/GNUmakefile
@@ -36,7 +36,7 @@ EXTRADEFS = '-DHOST_TUPLE="$(host_tuple)"' \
 
 all: pg_regress$(X)
 
-pg_regress$(X): pg_regress.o pg_regress_main.o $(WIN32RES) | submake-libpgport submake-generated-headers
+pg_regress$(X): pg_regress.o pg_regress_main.o $(WIN32RES) | submake-libpgport
 	$(CC) $(CFLAGS) $^ $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@
 
 # dependencies ensure that path changes propagate
@@ -65,6 +65,8 @@ include $(top_srcdir)/src/Makefile.shlib
 
 all: all-lib
 
+$(OBJS): | submake-generated-headers
+
 # Test input and expected files.  These are created by pg_regress itself, so we
 # don't have a rule to create them.  We do need rules to clean them however.
 input_files = $(patsubst $(srcdir)/input/%.source,sql/%.sql, $(wildcard $(srcdir)/input/*.source))