lex yacc プロジェクトをコンパイルするための非常に基本的な Makefile の例があります。
all: y.tab.o lex.yy.o
lex.yy.c: calc.l
#flex calc.l
y.tab.c y.tab.h: calc.y
#bison -d calc.y
lex.yy.o: lex.yy.c y.tab.h
#gcc -c lex.yy.c
y.tab.o: y.tab.c
#gcc -c y.tab.c
しかし、make を実行すると、bison が 2 回呼び出されていることがわかります。ターゲット y.tab.c と y.tab.h ごとに 1 回と仮定しています。
#bison -d calc.y
#gcc -c y.tab.c
#flex calc.l
#bison -d calc.y
#gcc -c lex.yy.c
これは、並列ビルドで問題を引き起こしています。依存関係が上記と同じになるようにメイクファイルを変更するにはどうすればよいですか。ただし、bison は 1 回だけ呼び出されて、両方のターゲット ファイルを生成します。