Следующее работает в оболочке bash
cp abc.tex "abc-$(date +"%Y-%m-%-d-%H-%M-%S").tex"
но не в makefile. Как это исправить?
Вот make-файл:
b:
cp abc.tex "abc-$(date +"%Y-%m-%-d-%H-%M-%S").tex"
Когда я делаю «make b», bash говорит:
cp abc.tex "abc-.tex"
решение1
В Makefile $(...)
обозначает расширение многосимвольной make
переменной. У вас нет make
переменной с именем date +"%Y-%m-%-d-%H-%M-%S"
, поэтому она заменяется пустой строкой.
Чтобы разрешить оболочке, которая make
использует команду, выполнить ее $(...)
в качестве подстановки, запишите ее так $$(...)
:
b:
cp abc.tex "abc-$$(date +"%Y-%m-%-d-%H-%M-%S").tex"
make
Вариант GNU make
также имеет $(shell ...)
, который работает аналогично подстановке команд в оболочке.
решение2
Возможно, вы ищете $(shell ...)
макрос.
b:
cp abc.tex "abc-$(shell date +"%Y-%m-%-d-%H-%M-%S").tex"
Это генерирует следующий вывод
> make b
cp abc.tex "abc-2021-10-21-16-54-02.tex"