記述ファイルでのマクロの使用
マクロを記述ファイルの中で定義した後で、 記述ファイル・コマンドでマクロを使用するには、$ (ドル記号) をマクロの名前の前に付けます。
マクロ名が 1 文字より長い場合は、( ) (小括弧) または { } (中括弧) で囲みます。 次に、マクロの使用例を示します。
$(CFLAGS)
$2
$(xy)
$Z
$(Z)上記のリストで、最後の 2 つの例は同じ効果があります。
次のフラグメントは、いくつかのマクロの定義と使用方法を示しています。
# OBJECTS is the 3 files x.o, y.o and
# z.o (previously compiled)
OBJECTS = x.o y.o z.o
# LIBES is the standard library
LIBES = -lc
# prog depends on x.o y.o and z.o
prog: $(OBJECTS)
# Link and load the 3 files with
# the standard library to make prog
cc $(OBJECTS) $(LIBES) -o progこの記述ファイルを使用する make コマンドは、 libc.a ライブラリーを持つ 3 つのオブジェクト・ファイル (x.o、 y.o、および z.o) をリンクしてロードします。
コマンド・ラインで入力されたマクロ定義は、記述ファイルに重複マクロ定義があると、 それらを指定変更します。 したがって、以下のコマンドは lex を使用してファイルをロードします。 (-11)ライブラリー:
make "LIBES= -ll"注: 中にブランクのあるマクロをコマンド・ラインに入力するときは、 そのマクロを " " (二重引用符) で囲みます。 二重引用符がない場合、 シェルはそのブランクをパラメーター・セパレーター (マクロの一部ではない) と解釈します。
make コマンドは、 最高 10 レベルまでのネストされたマクロ式を扱うことができます。 以下の例の定義に基づいて、式は以下のようになります。$($(macro2))評価結果:value1:
macro1=value1 macro2=macro1マクロの評価は、マクロが参照されるたびに行われます。 定義時に評価されるわけではありません。 マクロが定義されただけで一度も使用されないと、 一度も評価されないことになります。 これは、マクロにシェルによって解釈される値が割り当てられた場合、 特にその値が変更される場合は、非常に重要です。 次のような変数宣言があるとします。
OBJS = 'ls *.o'これは、オブジェクト・ファイルの作成または除去の処理中に参照すると、 そのたびに値が変化している可能性があります。 また、OBJS マクロが定義されたときの ls コマンドの値を保持しません。