構成オプションを遅延評価しようとしています。Make
変数が実際に使用(置換)された場合のみエラーを出したい。
次の Makefile を検討してください。
VAR = $(error "E")
NFS_DIR = NFS_DIR is $(VAR)
T = $(NFS_DIR) is 1
all:
echo Test
自分の環境 (/srv/nfs
値がある) で実行すると、出力は次のようになります。
➜ ~ make
echo Test
Makefile:3: *** "E". Stop.
したがって、再帰的な定義は単純な定義のように機能します。
環境をクリアすると、期待どおりに動作します。
➜ ~ env -i make
echo Test
Test
環境変数と同じ名前で定義された場合、再帰的に展開された変数が単純に展開された変数のように機能するという言及は見つかりませんでした。
質問は次のとおりです。
- なぜ観察された行動?
- 望ましい動作を実装する方法は?
更新: 明確にするために —?=
オプションは構成オプションであるため、使用したくありません。環境からではなく、厳密に Makefile から取得する必要があります。