diff --git a/src/Makefile.in b/src/Makefile.in
index 73a9dfd85cd05cad9e9e6e7edd3173d1369492ba..8517f6bed7eeae8b8362107a8d04d9fc973a006b 100644
--- a/src/Makefile.in
+++ b/src/Makefile.in
@@ -468,13 +468,13 @@ undump_modules: delete_dumped_modules
 	-rm dumpversion 2>/dev/null
 
 .SUFFIXES:
-.SUFFIXES: .c .h .o .m .mmod .cmod .symlist .pp .pph .protos .h_src .wxs .wixobj .msi .msm
+.SUFFIXES: .c .h .o .m .mmod .cmod .pp .pph .h_src .wxs .wixobj .msi .msm
 
 .c.pp:
 	$(CPP) $(PREFLAGS) -DPMOD_EXPORT=PMOD_EXPORT \
 	  -DPMOD_PROTO=PMOD_PROTO "$<" >"$@"
 
-.c.protos: precompile.sh-stamp
+%.protos: %.c precompile.sh-stamp
 	./precompile.sh --cache fake_dynamic_load.pike >"$@" --cpp --protos \
 	  $(CPP) $(PREFLAGS) -DPMOD_EXPORT=PMOD_EXPORT \
 	    -DPMOD_PROTO=PMOD_PROTO -DPIKE_PRECOMPILER=1 "$<" || \
@@ -520,7 +520,7 @@ $(PMOD_TARGETS): precompile.sh-stamp $(TMP_BINDIR)/precompile.pike $(PIKE_SRC_DI
 	./precompile.sh --cache precompile.pike $(PRECOMPILER_ARGS) >"$@" "$<" || { rm "$@"; exit 1; }
 
 # The same applies to this.
-.symlist.c: precompile.sh-stamp $(SRCDIR)/mklibpike.pike
+%.c: %.symlist precompile.sh-stamp $(SRCDIR)/mklibpike.pike
 	./precompile.sh --cache $(SRCDIR)/mklibpike.pike -I. -I "$(SRCDIR)" -S "$<" -o "$@" || { rm "$@"; exit 1; }
 
 # This rule is used for some header files that are generated from the
diff --git a/src/modules/common_module_makefile.in b/src/modules/common_module_makefile.in
index e6a5cff162324d88b44d1e0912a6363bfc52f69d..d3d805ff8a4b35c2c0de11e362dfa61cb645ffb2 100644
--- a/src/modules/common_module_makefile.in
+++ b/src/modules/common_module_makefile.in
@@ -39,7 +39,7 @@ $(MODULE_ARCHIVES) ThisIsAPhonyTargetBlaBlaBla: force
 	) || exit $$?
 
 .SUFFIXES:
-.SUFFIXES: .c .o .cmod .protos .m .mmod .cc .ccmod
+.SUFFIXES: .c .o .cmod .m .mmod .cc .ccmod
 
 $(PMOD_TARGETS): $(wildcard $(BUILD_BASE)/precompile.sh-stamp) $(TMP_BINDIR)/precompile.pike $(wildcard $(PIKE_SRC_DIR)/../lib/modules/Tools.pmod/Standalone.pmod/precompile.pike) Makefile.in
 
@@ -65,7 +65,7 @@ $(PMOD_TARGETS): $(wildcard $(BUILD_BASE)/precompile.sh-stamp) $(TMP_BINDIR)/pre
 	  exit $$status; \
 	fi
 
-.c.protos: $(BUILD_BASE)/precompile.sh-stamp
+%.protos: %.c $(BUILD_BASE)/precompile.sh-stamp
 	./precompile.sh --cache fake_dynamic_load.pike >"$@" --cpp --protos \
 	  $(CPP) $(PREFLAGS) -DPMOD_EXPORT=PMOD_EXPORT \
 	    -DPMOD_PROTO=PMOD_PROTO -DPIKE_PRECOMPILER=1 "$<" || \
@@ -96,7 +96,7 @@ $(PMOD_TARGETS): $(wildcard $(BUILD_BASE)/precompile.sh-stamp) $(TMP_BINDIR)/pre
 	  exit $$status; \
 	fi
 
-.cc.protos: $(BUILD_BASE)/precompile.sh-stamp
+%.protos: %.cc $(BUILD_BASE)/precompile.sh-stamp
 	./precompile.sh --cache fake_dynamic_load.pike >"$@" --cpp --protos \
 	  $(CXXCPP) $(PREFLAGS) -DPMOD_EXPORT=PMOD_EXPORT \
 	    -DPMOD_PROTO=PMOD_PROTO -DPIKE_PRECOMPILER=1 "$<" || \