ターゲットの並列構築を行う場合、まず依存関係リストが正確であることが重要なポイントになります。たとえば、 2 つの実行可能ファイルが同じオブジェクトファイルを共有しているときに、一方のファイルでしか依存関係が指定されていないと、並列構築を行なった場合はエラーになる可能性があります。次のメークファイルの断片を考えてみます。
all: prog1 prog2 prog1: prog1.o aux.o $(LINK.c) prog1.o aux.o -o prog1 prog2: prog2.o $(LINK.c) prog2.o aux.o -o prog2
直列的に構築を実行する場合は、ターゲット aux.o は prog1 の依存対象として作成されるので、prog2 の構築時には更新されています。一方、並列的に構築を実行すると、prog2 のリンクが、aux.o の作成前に設定される可能性があります。この場合は、エラーになります。make の .KEEP_STATE 機能で検出できる依存関係も一部ありますが、上のような関係はその対象にはなりません。