Команда не выполняется внутри интерполяции строк для Makefile

Я пытаюсь динамически заполнить переменные для некоторых команд, которые у меня есть в моем Makefile. Однако я не уверен, почему команды превращаются в пустую строку вместо того, чтобы запускать ее внутри строки.

Пример:

test:
    echo "hello $(cat foo.txt)"

Выход:

$ make test
echo "hello "
hello

Предпочтительный выход:

$ make test
echo "hello (contents of foo.txt)"
hello (contents of foo.txt)

person SafeDev    schedule 19.01.2021    source источник


Ответы (1)


Используйте 2 доллара:

test:
    echo "hello $$(cat foo.txt)"

См. Что означает двойной знак доллара в bash/Makefile?

И обратите внимание, что вы можете добавить @, чтобы make не печатал то, что он собирается делать, и что вам не нужно специально указывать цель test, потому что первая будет запускаться всегда:

test:
    @echo "hello $$(cat foo.txt)"

Бежать:

$ make
hello a b c
d e f
person Arkadiusz Drabczyk    schedule 19.01.2021