Как использовать подстановку параметров Bash в Makefile?
У меня есть следующее Makefile
где я хотел бы использовать синтаксис подстановки параметров Bash, как показано ниже:
SHELL:=/bin/bash
Foo=Bar
all:
@echo ${Foo}
@echo ${Foo/Bar/OK}
Однако это не работает, как ожидалось, так как вывод второго echo
команда пуста:
$ make
Bar
(empty)
Хотя он работает нормально при непосредственном вызове в shell:
$ Foo=Bar; echo ${Foo/Bar/OK}
OK
Как я могу использовать вышеуказанный синтаксис в Makefile?
1 ответ
Если вы хотите, чтобы оболочка расширяла переменную, вы должны использовать переменную оболочки, а не переменную make. ${Foo/Bar/OK}
переменная make, названная буквально Foo/Bar/OK
,
Если вы хотите использовать подстановку переменных оболочки, вам нужно присвоить это значение переменной оболочки:
all:
Foo='$(Foo)'; echo $${Foo/Bar/OK}
Обратите внимание, что мы используем двойной доллар $$
избегать знака доллара, чтобы make не пытался его расширить.
Я настоятельно рекомендую не добавлять @
к вашим правилам, пока вы не уверены, что они работают. Это самая распространенная ошибка, которую я вижу; если бы люди просто не использовали @
они могли видеть, что команда make вызывает, и тогда они лучше понимали, как работает make.