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

make の定義済みマクロを使用する

次の例は、前述の例と機能は同一ですが、コンパイルコマンドの代わりに make の定義済みマクロを使用しています。定義済みマクロを使用すると、コンパイル環境が変更されたときに、メークファイルを編集する必要がありません。また、コマンド行からコンパイラのオプションを指定するための CFLAGS マクロ (およびその他の FLAGS マクロ) を使用できます。定義済みマクロは、make の暗黙の規則でも頻繁に使用されます。後述のメークファイルで使用されている定義済みマクロを次に示します。これらの定義済みマクロ [このバージョンの make では定義済みマクロが、旧バージョンよりも頻繁に使用されています。ここで示す定義済みマクロの一部は、旧バージョンでは使用できません。] は、C プログラムのコンパイル全般で便利です。

COMPILE.c

cc コマンド行。以下のように CCCFLAGSCPPFLAGS-c オプションで構成されます。

COMPILE.c=$(CC) $(CFLAGS) $(CPPFLAGS) -c

マクロの名前の COMPILE という部分は、マクロがコンパイルの (オブジェクト、つまり .o ファイルを作成する) コマンド行を表すマクロであることを示しています。.c という接尾辞は、コマンド行が .c (C ソース) ファイルに適用されることを示すニーモニックです。


注 -

名前が FLAGS という文字列で終わるマクロは、関連するコンパイラコマンドのマクロにオプションを引き渡します。これらのマクロは、整合性と移植性を保つために使用します。また、メークファイル中にこれらのマクロに適したデフォルト値を記述しておくと便利です。すべての定義済みマクロのリストを、表 4-10 に示しています。


LINK.c

COMPILE.c などのオブジェクトファイルをリンクするための基本的な cc コマンド行です。-c オプションは使用せず、LDFLAGS マクロへの参照を使用します。

LINK.c=$(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS)
CC

値は cc です (この値は、別の C コンパイラのパス名に再定義できます)。

CFLAGS

cc コマンドのオプションです。デフォルトでは空です。

CPPFLAGS

cpp のオプションです。デフォルトでは空です。

LDFLAGS

リンカー ld のオプションです。デフォルトでは空です。

表 4-5 定義済みマクロを使用して C ソースをコンパイルするメークファイル
# 2 つの C ソースをコンパイルするメークファイル
CFLAGS= -O 
.KEEP_STATE:

functions: main.o data.o 
          $(LINK.c) -o functions main.o data.o 
main.o: main.c 
          $(COMPILE.c) main.c 
data.o: data.c 
          $(COMPILE.c) data.c 
clean: 
         	rm functions main.o data.o