Make-файлы полностью анализируются перед запуском первого правила. В рамках синтаксического анализа все цели и предпосылки должны быть расширены. Подробности о том, когда происходит расширение для различных частей make-файла, можно найти в Как make Читает Makefile в руководстве по сборке GNU.
Один из способов - использовать рекурсию:
thisexpands = $(warning Expanded!)
target1: ; $(MAKE) target1-recurse T1_DEPS='$(value thisexpands)'
T1_DEPS =
target1-recurse: $(T1_DEPS)
@echo Target 1
Это не работает:
Вероятно, вы можете отложить расширение, используя вторичное расширение , что-то вроде этого:
.SECONDEXPANSION:
target1: $$(thisexpands)
Будьте очень осторожны, чтобы избежать списка необходимых условий.