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 make
Variable. Sie haben keine make
Variable mit dem Namen date +"%Y-%m-%-d-%H-%M-%S"
, daher wird sie durch eine leere Zeichenfolge ersetzt.
Um die verwendete Shell als Befehlsersatz make
ausführen zu lassen, schreiben Sie es wie folgt :$(...)
$$(...)
b:
cp abc.tex "abc-$$(date +"%Y-%m-%-d-%H-%M-%S").tex"
Die GNU- make
Variante von make
verfü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"