copiar el archivo al nombre del archivo con fecha y hora funciona en bash pero no en makefile

copiar el archivo al nombre del archivo con fecha y hora funciona en bash pero no en makefile

Lo siguiente funciona en un shell bash

cp abc.tex "abc-$(date +"%Y-%m-%-d-%H-%M-%S").tex"

pero no en un archivo MAKE. ¿Cómo lo soluciono?

Aquí está el archivo MAKE:

b:
    cp abc.tex "abc-$(date +"%Y-%m-%-d-%H-%M-%S").tex"

Cuando hago "hacer b", bash dice:

cp abc.tex "abc-.tex"

Respuesta1

En un Makefile, $(...)denota la expansión de una variable de varios caracteres make. No tiene una makevariable llamada date +"%Y-%m-%-d-%H-%M-%S", por lo que se reemplaza por una cadena vacía.

Para permitir que el shell que makeusa se ejecute $(...)como sustitución de comando, escríbalo como $$(...):

b:
        cp abc.tex "abc-$$(date +"%Y-%m-%-d-%H-%M-%S").tex"

La makevariante GNU de maketambién $(shell ...)funciona de manera similar a una sustitución de comando en el shell.

Respuesta2

Quizás estés buscando la $(shell ...)macro.

b:
    cp abc.tex "abc-$(shell date +"%Y-%m-%-d-%H-%M-%S").tex"

Esto genera el siguiente resultado

> make b
cp abc.tex "abc-2021-10-21-16-54-02.tex"

información relacionada