プログラミングユーティリティ

動的な依存関係のパラメータ

動的な依存関係のパラメータは、メークファイルの依存関係の行で使用した場合にのみ有効です。$$@ は、: 記号の左側にある文字列 ($@) を示します。また、$$(@F) という形式もあり、$@ のファイル部分にアクセスできます。以下に例を示します。

cat: $$@.c

この例では、依存関係は、実行時に文字列 cat.c に変換されます。これは、ソースファイルがそれぞれ 1 つだけの実行可能ファイルを多数構築する際に便利です。たとえば、オペレーティングシステムのソフトウェアコマンドのディレクトリには、以下のようなメークファイルを作成できます。

CMDS = cat dd echo date cmp comm chown 

$(CMDS): $$@.c 
        	$(CC) $(CFLAGS) $? -o $@

これは、すべての 単一ファイルのプログラムのサブセットです。複数のファイルから成るプログラムでは、ディレクトリを割り当てて、プログラムごとにメークファイルを作成します。特別のコンパイル手順を持つファイルでは、メークファイルに特別なエントリが必要です。

もう 1 つの便利な依存関係のパラメータとして、$$(@F) があります。これは、$$@ のファイル名部分を示します。この場合も、実行時に評価されます。/usr/src/head ディレクトリにある makefile を使用して /usr/include ディレクトリを管理するなどの場合に便利です。この場合は、/usr/src/head/makefile は以下のようになります。

INCDIR = /usr/include 

INCLUDES = ¥ 
        	$(INCDIR)/stdio.h ¥ 
        	$(INCDIR)/pwd.h ¥ 
        	$(INCDIR)/dir.h ¥ 
        	$(INCDIR)/a.out.h 

$(INCLUDES): $$(@F) 
        	cp $? $@ 
        	chmod 0444 $@

このメークファイルは、/usr/src/head にある前述のファイルのいずれかが更新されるたびに、/usr/include ディレクトリを完全に管理します。