Расширение переменной
$()
- это расширение переменной в make, это должна быть просто подстановка строк - если ваш make-файл имеет значение
version=1
date=1.1.10
package_version:=$(version)x0d$(date)
, тогда переменная package_version
расширится до 1x0d1.1.10
.
Замена
Синтаксис $(var:a=b)
является ссылкой для подстановки и расширится до var
с суффиксом a
, замененным на b
.
Например, в
foobar:= foo bar
faabar:=$(foobar:oo=aa)
$(faabar)
расширится до строки faa bar
.
Несколько целей
Несколько целей в правиле make эквивалентны наличию n правил с одной целью, например
foo bar:foo.c bar.c
$(CC) -o $@ $^
эквивалентно
foo:foo.c bar.c
$(CC) -o $@ $^
bar:foo.c bar.c
$(CC) -o $@ $^
помните, что все переменные здесь раскрываются.
Ложные цели
Цель .PHONY
объявляет, что правило не создает фактический файл, поэтому оно всегда будет построено. Как всегда, переменные раскрываются первыми. В вашем случае это расширится до что-то вроде
.PHONY: foo bar
Экранирование
Знак доллара - это escape-символ в make-файлах, $$
в вашем примере perl - это литерал $
, например, substitute
будет строкой
perl -p -e 's/@([^@]+)@/defined $ENV{$1} ? $ENV{$1} : $&/ge'
Знаки доллара здесь обрабатываются perl и, вероятно, дают переменные окружения (я не знаю perl).