Sun WorkShop TeamWare ユーザーズガイド

並列化を制限するとき

1 つのメークファイルの中でファイルの衝突が避けられない場合があります。次の例で、xstr(1) は C プログラムから文字列を抽出することによって文字列を共有しています。xstr コマンドは修正された C プログラムを x.c ファイルに書き込み、修正された strings ファイルに文字列を追加します。xstr は各 C プログラムファイルに対して実行されなければならないため、通常は次のように新しい .c.o 規則を定義します。


.c.o:
	$(CC) $(CPPFLAGS) -E $*.c | xstr -c - 
	$(CC) $(CFLAGS) $(TARGET_ARCH) -c x.c
	mv x.o $*.o

上記の規則を使用した場合、dmake ユーティリティでは同時に複数のターゲットを構築することはできません。これは、各ターゲットを構築するたびに、同じ x.c ファイルと strings ファイルを書き換えることになり、しかも使用するファイルを変更することはできないためです。このような状況では、特殊ターゲットの .NO_PARALLEL: を使用して、これらのターゲットを並行構築しないように dmake に指示することができます。たとえば、.c.o 規則を使用して構築されるオブジェクトが、OBJECTS マクロによって定義されている場合、次のように記述することによって、それらのターゲットを逐次的に構築するように dmake に指示することができます。


.NO_PARALLEL: $(OBJECTS)

ほとんどのオブジェクトを逐次的に構築する必要がある場合は、.NO_PARALLEL: ターゲットを依存ファイルなしで指定することにより、すべてのオブジェクトをデフォルトで逐次処理するようにした方が、簡単で安全です。並列構築が可能なターゲットがある場合は、次のように .PARALLEL: ターゲットの依存ファイルとして指定できます。


.NO_PARALLEL:
.PARALLEL: $(LIB_OBJECT)