Как использовать подстановку параметров 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.

Другие вопросы по тегам