Во-первых, для работы в моей среде ваш make-файл нуждается в двух небольших модификациях: замените скобки в echo
на кавычки и добавьте правило для x
, чтобы получить:
var1 = x
dep: $(var1)
echo "$^ -> $@"
x:
Похоже, нет способа восстановить нерасширенную форму имени переменной в рецепте. Мое предлагаемое решение / обходной путь имеет два аспекта: кэшируйте имя переменной в другой переменной и, согласно комментарию MadScientist, используйте $(warning ...)
. Например, make-файл:
var1 = x
dep: var1_=var1
dep: $(var1)
@echo "$^ -> $@"
@echo "$(var1_) -> $@"
$(warning "Info: Using $^ to build $@")
$(warning "Info: Using $(var1) to build $@")
$(warning "Info: Using $(var1_) to build $@")
$(warning "Info: Using $($(var1_)) to build $@")
x:
даст:
Makefile:7: "Info: Using x to build dep"
Makefile:8: "Info: Using x to build dep"
Makefile:9: "Info: Using var1 to build dep"
Makefile:10: "Info: Using x to build dep"
x -> dep
var1 -> dep
Переменная var1_
должна быть определена в отдельной строке (см. https://stackoverflow.com/a/20714468/318716),, которая не выглядит хорошо документированной. И порядок вывода интересен.
Редактировать: более простой вариант этой идеи - заменить:
var1 = x
dep: var1_=var1
только с:
var1 = x
var1_ = var1