копирование файла в имя файла с датой и временем работает в bash, но не в makefile

копирование файла в имя файла с датой и временем работает в bash, но не в makefile

Следующее работает в оболочке 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"

Связанный контент