diff --git a/src/Makefile.am b/src/Makefile.am
index aced0535e4e6f6e17c1aadedb0ac837a41c501ae..b594a8308823a325a3cfddf94be4ca1514db886f 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -68,14 +68,20 @@ dynare_m_CPPFLAGS = $(BOOST_CPPFLAGS) -I.
 dynare_m_LDFLAGS = $(AM_LDFLAGS) $(BOOST_LDFLAGS)
 dynare_m_LDADD = macro/libmacro.a $(BOOST_FILESYSTEM_LIB) $(BOOST_SYSTEM_LIB)
 
-DynareFlex.cc FlexLexer.h: DynareFlex.ll
+DynareFlex.cc: DynareFlex.ll
 	$(LEX) -o DynareFlex.cc DynareFlex.ll
+
+FlexLexer.h:
 	cp $(LEXINC)/FlexLexer.h . || test -f ./FlexLexer.h
 
 dynare_m-DynareFlex.$(OBJEXT): CXXFLAGS += -Wno-old-style-cast
 
-DynareBison.cc DynareBison.hh location.hh stack.hh position.hh: DynareBison.yy
-	$(YACC) -W -o DynareBison.cc DynareBison.yy
+# We do not use a multiple target rule for Bison, because otherwise it will be
+# run several times in parallel builds
+DynareBison.cc: DynareBison.yy
+	$(YACC) -W -o $@ $<
+
+DynareBison.hh location.hh stack.hh position.hh: DynareBison.cc
 
 all-local: $(PROGRAMS)
 
diff --git a/src/macro/Makefile.am b/src/macro/Makefile.am
index a23480b0eab025799f43813caabdaefdb47f4754..c97e99fc65ab70541b36490f78a17c7023cfa40e 100644
--- a/src/macro/Makefile.am
+++ b/src/macro/Makefile.am
@@ -26,5 +26,9 @@ Tokenizer.cc: Tokenizer.ll
 
 libmacro_a-Tokenizer.$(OBJEXT): CXXFLAGS += -Wno-old-style-cast
 
-Parser.cc Parser.hh location.hh stack.hh position.hh: Parser.yy
-	$(YACC) -W -o Parser.cc Parser.yy
+# We do not use a multiple target rule for Bison, because otherwise it will be
+# run several times in parallel builds
+Parser.cc: Parser.yy
+	$(YACC) -W -o $@ $<
+
+Parser.hh location.hh stack.hh position.hh: Parser.cc