導入
cc というコンパイラ名やオプションを、あちこちのレシピに直書きすると、変えたいときに全部直すハメになります。変数にまとめておけば、1か所直すだけで済みます。
説明
変数は 名前 = 値 で定義し、$(名前) で使います。
CC = cc
CFLAGS = -Wall
app: main.c utils.c
$(CC) $(CFLAGS) -o app main.c utils.c
make すると $(CC) は cc、$(CFLAGS) は -Wall に展開され、cc -Wall -o app main.c utils.c が走ります。定石の変数名があります。
| 変数 | 意味 |
|---|---|
CC | Cコンパイラ(既定 cc) |
CFLAGS | コンパイルオプション |
LDFLAGS | リンク時のオプション |
代入には種類があります。
=… 使うときに展開(再帰的変数):=… その場で1回だけ展開(単純変数)?=… まだ定義されていなければ設定+=… うしろに追記
やってみよう
make して展開結果を確認したら、CFLAGS = -Wall を CFLAGS = -Wall -O2 に変えて再度 make。コマンドが変わります。コマンドラインから make CFLAGS=-g と渡すと、その場だけ上書きできることも試してみましょう。
演習
CC を使ったまま、CFLAGS に最適化オプション -O2 を追加して、make の出力に -O2 が現れるようにしましょう。
ヒント1を見る
CFLAGS = -Wall -O2 のようにスペース区切りで足します。
ヒント2を見る
レシピ側で $(CFLAGS) を使っていれば、変数を直すだけで反映されます。