Как распечатать только имя переменной как часть рецептов? - PullRequest
0 голосов
/ 12 января 2019

Пример:

var1 = x

dep : $(var1)
     echo ($^ -> $@)

Это покажет x -> dep, но я действительно хочу показать это var1 -> dep.

Я в основном хочу разбросать это эхо по всем правилам, чтобы я мог понять граф зависимостей. Ничто другое не сработало.

1 Ответ

0 голосов
/ 12 января 2019

Во-первых, для работы в моей среде ваш 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...