Makefile変数チートシート:自動変数 $@ $< $^ と := = の違い

Makefileを書いていると、$@$< みたいな記号や、=:= の使い分けで手が止まりがちです。この記事は変数まわりだけを逆引きでまとめたチートシートです。挙動はすべて手元の GNU Make で実行して確認しています。

もっと踏み込んだ仕様は GNU Make 4.4 日本語マニュアル 第6章「変数の使い方」 を参照してください。この記事はその逆引き版です。

=:= の違い(ここだけは押さえる)

いちばん引っかかるのがこれです。

  • = … 遅延展開。右辺は使うときに評価される。
  • := … 即時展開。右辺はその行を読んだ時点で評価される。

次の Makefile で違いが出ます。

続きを読む Makefile変数チートシート:自動変数 $@ $< $^ と := = の違い

Makefileの条件分岐 ifeq / ifdef 完全ガイド

Makefile で「デバッグビルドのときだけフラグを足したい」「OS ごとにコマンドを変えたい」といった分岐をしたいとき使うのが ifeqifdef です。書き方に少しクセがあるので、実例つきでまとめました。挙動はすべて手元の GNU Make で実行して確認しています。

仕様の詳細は GNU Make 4.4 日本語マニュアル 第7章「Makefileの条件分岐」 を参照してください。この記事はその実例版です。

4つの条件ディレクティブ

ディレクティブ 分岐の条件
ifeq 2つの値が等しい
ifneq 2つの値が等しくない
ifdef 変数が定義されている(空でない)
ifndef 変数が定義されていない(空)

いずれも elseendif で閉じます。else は省略できますが endif は必須です。

ifeq: 値を比較して分岐

続きを読む Makefileの条件分岐 ifeq / ifdef 完全ガイド