copiar arquivo para nome de arquivo com data e hora funciona no bash, mas não no makefile

copiar arquivo para nome de arquivo com data e hora funciona no bash, mas não no makefile

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 makevariável chamada date +"%Y-%m-%-d-%H-%M-%S", então ela é substituída por uma string vazia.

Para permitir que o shell que makeusa 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 makevariante GNU maketambé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"

informação relacionada