Sun WorkShop TeamWare ユーザーズガイド

ライブラリの同時更新

並列処理で発生する可能性があるもう一つの問題は、ライブラリを構築するためのデフォルト規則によって、同じファイル (ライブラリ) が同時に変更されることです。不適切な .c.a 規則を使用すると、dmake は各オブジェクトファイルを構築した後、そのオブジェクトファイルをアーカイブします。dmake が 2 つのオブジェクトファイルを並列処理によってアーカイブしたときに同時に更新が行われると、アーカイブファイルが破壊されることになります。この例を次に示します。


.c.a:
	$(COMPILE.c) -o $% $< 
	$(AR) $(ARFLAGS) $@ $% 
	$(RM) $% 

この問題を回避するためには、すべてのオブジェクトファイルの構築が終了した後、それらのオブジェクトファイルをアーカイブする方法があります。適切な接尾辞の規則とそれに対応するライブラリの指定方法を次に示します。


.c.a:
	$(COMPILE.c) -o $% $< 
	$(COMPILE.c) -o $% $< 
lib.a: lib.a($(OBJECTS)) 
	$(AR) $(ARFLAGS) $(OBJECTS) 
	$(RM) $(OBJECTS)