$(VAR)
расширяется до значения переменной VAR
.Это переменная Make (не переменная оболочки и т. Д.).Например, если ранее в вашем Makefile
вы определяете
VAR=ick/poo
, то VAR
расширяется до ick/poo
, а @D
в вашем рецепте расширяется до части каталога, ick
.
Поскольку вы, похоже, не понимаете отношения между shell и make
, я, возможно, должен указать, что это два разных языка, хотя в Makefile
вы встретите оба;рецепты - части с отступом от табуляции - будут переданы в оболочку для оценки (хотя обычно оболочкой будет /bin/sh
, а не Bash, если вы специально не переопределите переменную Make SHELL
для ее принудительного применения).
Кстати, в оболочке внешне похожая конструкция $(cmd)
выполняет подстановку команд;команда cmd
будет оценена, а ее вывод будет вставлен в виде текста.Так, например,
echo Running in $(pwd)
напечатает
Running in /home/you
, если выполняется в каталоге /home/you
(команда pwd
выводит ваш текущий рабочий каталог).... Хотя в Makefile
знак доллара обычно оценивается и потребляется самой make
;таким образом, чтобы передать буквенный знак доллара в оболочку, вы должны удвоить его.
test:
echo Running in $$(pwd)