1. ホーム
  2. makefile

[解決済み] GNU Makefile の変数割り当て =, ?=, :=, += の違いは何ですか?

2022-03-19 13:40:42

質問

どなたか、Makefile における変数の割り当てが実際にどのように行われるかについて、明確な説明をお願いします。

.NETの違いは何ですか?

 VARIABLE = value
 VARIABLE ?= value
 VARIABLE := value
 VARIABLE += value

を読みました。 セクション をGNU Makeのマニュアルに載せていますが、私にはまだ意味がわかりません。

どのように解決するのですか?

レイジーセット

VARIABLE = value

通常の変数の設定ですが、他の変数で言及されているものは value フィールドは、宣言時の値ではなく、その変数が使用される時点の値で再帰的に展開されます。

イミディエイトセット

VARIABLE := value

内部の値を単純に展開した変数の設定 - 内部の値は宣言時に展開されます。

不在の場合の遅延セット

VARIABLE ?= value

変数に値がない場合のみ設定する。 value は常に VARIABLE がアクセスされます。と等価である。

ifeq ($(origin VARIABLE), undefined)
  VARIABLE = value
endif

をご覧ください。 ドキュメント をご覧ください。

追加

VARIABLE += value

与えられた値を既存の値に追加する(変数が存在しない場合はその値に設定する)。