在 makefile 中的命令前添加反斜杠有什么作用?
例如本例中的
\rm
命令:
# LaTeX Makefile
FILE=report
all: $(FILE).pdf
.PHONY: clean
clean:
\rm *.aux *.blg *.out *.bbl *.log
$(FILE).pdf: $(FILE).tex
pdflatex $(FILE)
pdflatex $(FILE)
bibtex $(FILE)
pdflatex $(FILE)
pdflatex $(FILE)
不需要,但也没有什么坏处。配方中的反斜杠(除非它们位于行尾)并不有趣,因此它们只是传递给 shell。 shell 会发现反斜杠 (
r
) 后面的下一个字符不是特殊字符,因此它会忽略反斜杠。
通常人们在 shell 命令之前使用反斜杠,以确保不使用 shell 别名:反斜杠禁止别名查找:
$ alias foo='echo bar'
$ foo
bar
$ \foo
foo: command not found
但是,在 makefile 中不需要这样做,因为 make 使用
/bin/sh
作为非交互式 shell 调用所有配方,因此这些别名通常不可用。