Как распечатать расширенные переменные из Makefile? - PullRequest
0 голосов
/ 19 апреля 2019

Учитывая Makefile, в котором libdir определяется как libdir = ${exec_prefix}/lib, как напечатать его окончательное (расширенное) значение?

Запуск make -pns | grep -e "^libdir" | uniq печатает libdir = ${exec_prefix}/lib, тогда как я скорее хочу увидеть /usr/local/lib (при условии, что exec_prefix равно /usr/local).

Возможно ли, не добавляя Makefile с еще одним правилом?

Ответы [ 2 ]

1 голос
/ 20 апреля 2019

Как насчет:

printf 'include Makefile\nfoo:\n\t@echo "$(libdir)"\n' | make -f - foo

Обратите внимание, что понятие окончательное значение сложно определить с помощью make.Это может зависеть от конкретной цели ...

1 голос
/ 19 апреля 2019

Проблема в том, что вы подразумеваете под «конечным значением».Для рекурсивной переменной это буквальная строка $(exec_prefix}/lib.И расширение происходит только тогда, когда переменная указывается с помощью ${libdir}.

Однако простые переменные немедленно раскрываются.Так что libdir:=${libdir} и make -np дадут желаемый результат.Но иначе это невозможно.

Кстати.Вы можете написать общее правило «печати», как это (в GMSL):

print-%:
    @echo value of "$*" is "$($*)"

И затем просто выполните make print-libdir

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...