make
sendet nur ein Rezept (außer zum Aufspalten langer Zeilen) an Ihre Shell und interpretiert es nicht. Es ist also deine Schale, die es interpretiert.
So dass Ihre Shell diese echo
und printf
Befehle ausführen. Und Shells wie bash oder zsh verwenden eingebaute Befehle für echo und printf (wenn Sie nicht sagen, den Befehl /bin/echo
explizit zu verwenden).
Und es gibt einen Unterschied zwischen dem Verhalten der eingebauten Befehle zwischen den Shells. Außerdem können Sie eine Shell zum Ausführen interaktiver Befehle verwenden, und make
verwenden Sie eine andere Shell (standardmäßig/bin/sh) für die Bearbeitung von Rezepten.
Hier ist ein Beispiel für den Unterschied zwischen den Schalen. Als ich in echo \\newcommand
in bash
laufen erhalte ich:
$ echo \\newcommand
\newcommand
Und wenn ich echo \\newcommand
in zsh
laufen erhalte ich:
$ echo \\newcommand
ewcommand
Ich vermute, dass Sie, weil es anderes Ergebnis zu bekommen. Und eigentlich muss printf '\\newcommand{\\coverheight}{11.0in}'
richtiger sein, weil es starke Zitate verwendet.
Auf jeden Fall eine Möglichkeit, in Make-Datei zu drucken, scheint Echo mit externem Befehl/ist/werden:
all:
command echo '\\newcommand{\\coverheight}{11.0in}' > tmp
Oder verwenden Sie starkes Zitat, wie Sie bereits getan haben:
all:
printf '\\newcommand{\\coverheight}{11.0in}' > tmp