O seguinte funciona em um shell bash
cp abc.tex "abc-$(date +"%Y-%m-%-d-%H-%M-%S").tex"
mas não em um makefile. Como faço para corrigir isso?
Aqui está o makefile:
b:
cp abc.tex "abc-$(date +"%Y-%m-%-d-%H-%M-%S").tex"
Quando eu faço "make b", o bash diz:
cp abc.tex "abc-.tex"
Responder1
Em um Makefile, $(...)
denota a expansão de uma variável com vários caracteres make
. Você não tem uma make
variável chamada date +"%Y-%m-%-d-%H-%M-%S"
, então ela é substituída por uma string vazia.
Para permitir que o shell que make
usa seja executado $(...)
como uma substituição de comando, escreva-o como $$(...)
:
b:
cp abc.tex "abc-$$(date +"%Y-%m-%-d-%H-%M-%S").tex"
A make
variante GNU make
também possui $(shell ...)
, que funciona de maneira semelhante a uma substituição de comando no shell.
Responder2
Talvez você esteja procurando a $(shell ...)
macro.
b:
cp abc.tex "abc-$(shell date +"%Y-%m-%-d-%H-%M-%S").tex"
Isso gera a seguinte saída
> make b
cp abc.tex "abc-2021-10-21-16-54-02.tex"