ファイルの同時更新の例は、複数のターゲットに対して同一の規則が定義されている場合にも発生します。例として、lex(1) で使用するためにプログラムとヘッダーの両方を構築する yacc(1) というプログラムを次に示します。同一規則によって複数のターゲットを構築する場合、+ を使用してそれらが 1 つのグループであることを指定する必要があります。これは、並列構築を行う場合に特に重要です。
y.tab.c y.tab.h: parser.y $(YACC.y) parser.y
この規則は、次のように 2 つの規則が指定された場合と同等になります。
y.tab.c: parser.y $(YACC.y) parser.y y.tab.h: parser.y $(YACC.y) parser.y
make を逐次モードで実行する場合、最初の規則が構築されて y.tab.c が生成され、 y.tab.h は最新なので次に構築する必要はないと判断されます。並列モードで構築を行うと、dmake は yacc によって y.tab.c が構築される前に y.tab.h をチェックするため、y.tab.h を構築する必要があると判断し、最初の yacc の処理と並行して、別の yacc を開始します。このように 2 つの yacc が、同じファイル (y.tab.c および y.tab.h) に書き込みを行うため、これらのファイルは破壊され、正しい結果が得られません。この規則を正しく指定するには、 + を使って 2 つのターゲットが同じ規則により同時に構築されることを示します。正しい規則の例を次に示します。
y.tab.c + y.tab.h: parser.y $(YACC.y) parser.y