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

出力の変換

マクロの値は、評価時に置換されます。通常の形式を以下に示します。ここで、角括弧で囲んだ文字列は省略可能です。

$(macro[:string1=[string2]])

置換の指定がなくマクロ名が 1 文字の場合は、括弧を省略できます。置換文字列がある場合は、マクロの値は、空白文字、タブ、復帰改行で区切った複数の語が連なったものとして扱われます。したがって、語が string1 で終わる場合は、string1string2 に置換されます (string2 がない場合は NULL 文字列に置換されます)。

このような置換が行われるのは、make が接尾辞を区別するためです。この機能は、アーカイブライブラリを管理する際に便利です。最新でないメンバーを蓄積して、すべての C プログラム (接尾辞が .c のファイル) を処理することができるシェルスクリプトを記述するだけで管理を行うことができます。以下の例は、アーカイブライブラリの管理用に make の実行を最適化します。

$(LIB): $(LIB)(a.o) $(LIB)(b.o) $(LIB)(c.o) 
        	$(CC) -c $(CFLAGS) $(?:.o=.c) 
        	$(AR) $(ARFLAGS) $(LIB) $? 
        	rm $?

アーカイブライブラリを定義するソースファイルの種類 (接尾辞) ごとに、上記の形式の依存関係が必要です。これによって、make が生成するさまざまな情報をより汎用的に使用することができるようになります。