Makefile:echo不正确打印

时间:2016-05-13 07:02:43

标签: linux makefile echo

我有以下命令

$ echo \\newcommand{\\coverheight}{11.0in} > tmp
$ cat tmp
echo \\newcommand{\\coverheight}{11.0in} > tmp

但是当我在make文件中使用相同的echo命令时,它没有正确写入文件。

# Makefile
all:
       printf '\\newcommand{\\coverheight}{11.0in}' > tmp

运行`make'后,输出为:

$ cat tmp 

ewcommand{

如何使用Makefile使用echo正确写入文件?

1 个答案:

答案 0 :(得分:0)

make只是将一个食谱(除了分割长行除外)发送到你的shell并且不解释它。所以你的shell会解释它。

所以你的shell运行这个echoprintf命令。像bash或zsh这样的shell使用echo和printf的内置命令(如果你不说明确地使用/bin/echo命令)。

shell之间内置命令的行为有所不同。更重要的是,您可以使用一个shell运行交互式命令,make使用不同的shell(默认情况下为/ bin / sh)来处理收件人。

以下是shell之间差异的示例。当我在echo \\newcommand中的bash中投放时,我得到了:

$ echo \\newcommand
\newcommand

当我在echo \\newcommand中运行zsh时,我得到了:

$ echo \\newcommand

ewcommand

我怀疑你因为它而得到不同的结果。实际上printf '\\newcommand{\\coverheight}{11.0in}'必须更正确,因为它使用强引号。

无论如何,在makefile中打印的一种方法似乎是使用外部命令/ bin / echo:

all:
       command echo '\\newcommand{\\coverheight}{11.0in}' > tmp

或者使用强有力的报价:

all:
       printf '\\newcommand{\\coverheight}{11.0in}' > tmp