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

マクロ処理の変更

このバージョンでは、マクロの値を任意の長さにすることができます。また、旧バージョンではマクロの値から最後の空白文字だけが削除されましたが、このバージョンでは最初と最後の両方の空白文字が削除されます。

マクロ : 定義、置換、接尾辞置換

新しい追加演算子

+=

マクロの既存の値に、先頭にスペースが付いた文字列を追加します。

条件付きマクロ定義

:=

ターゲットの条件付きマクロ定義を示す演算子です。

target := macro = value

このようにメークファイルで記述すると、target およびその依存関係を処理する際には、macrovalue に指定された値になります。

条件付きマクロのパターン

make は、条件付きマクロ定義のターゲット部分において、ワイルドカードパターンである % を認識します。以下に例を示します。

profile_% := CFLAGS += -pg

この例は、profile_ という接頭辞を持つすべてのターゲットについて、CFLAGS マクロを変更します。条件付き定義の値では、パターン置換を使用できます。以下に例を示します。

profile_% := OBJECTS = $(SOURCES:%.c=profile_%.o)

この例は、SOURCES 値に指定されているすべての .c ファイルのベース名の前後に、profile_ という接頭辞および .o という接尾辞を追加します。

接尾辞の置換の優先度

部分文字列の置換は、参照されるマクロが展開されてから実行されます。旧バージョンの make では、置換が先に実行されるため、結果を直観的に理解しにくくなっていました。

入れ子にしたマクロ参照

このバージョンの make は、内側の参照を展開してから外側の参照を展開します。以下に例を示します。

CFLAGS-g = -I../include
  OPTION = -g
  $(CFLAGS$(OPTION))

この例の入れ子にした参照の値は、旧バージョンでは NULL 値になりましたが、このバージョンでは -I../include になります。

クロスコンパイルマクロ

定義済みマクロの HOST_ARCH および TARGET_ARCH をクロスコンパイルで使用できます。デフォルトでは、arch マクロは、arch コマンドが返す値に設定されます。

マクロでのシェルコマンド出力

以下の定義は、command で指定されたコマンドの標準出力を MACRO の値として設定します。

MACRO :sh = command

出力に含まれる復帰改行は、空白文字に置換されます。コマンドは、定義が読み込まれたときに 1 回だけ実行されます。標準エラー出力は無視されます。コマンドがゼロ以外の終了ステータスを返した場合は、make はエラーを表示して停止します。

$(MACRO :sh)

このマクロ参照は、参照が評価されるときに MACRO に設定されているコマンド行出力に展開されます。復帰改行は、空白文字に置換されます。標準エラー出力は無視されます。コマンドがゼロ以外の終了ステータスを返した場合は、make はエラーを表示して停止します。