Das Kopieren einer Datei in einen Dateinamen mit Datum/Uhrzeit funktioniert in Bash, aber nicht im Makefile.

Das Kopieren einer Datei in einen Dateinamen mit Datum/Uhrzeit funktioniert in Bash, aber nicht im Makefile.

Folgendes funktioniert in einer Bash-Shell

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

aber nicht in einem Makefile. Wie behebe ich das?

Hier ist das Makefile:

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

Wenn ich „make b“ mache, sagt bash:

cp abc.tex "abc-.tex"

Antwort1

Bezeichnet in einem Makefile $(...)die Erweiterung einer mehrstelligen makeVariable. Sie haben keine makeVariable mit dem Namen date +"%Y-%m-%-d-%H-%M-%S", daher wird sie durch eine leere Zeichenfolge ersetzt.

Um die verwendete Shell als Befehlsersatz makeausführen zu lassen, schreiben Sie es wie folgt :$(...)$$(...)

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

Die GNU- makeVariante von makeverfügt außerdem über $(shell ...), das auf ähnliche Weise wie eine Befehlsersetzung in der Shell funktioniert.

Antwort2

Möglicherweise suchen Sie nach dem $(shell ...)Makro.

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

Dies erzeugt die folgende Ausgabe

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

verwandte Informationen