我经常发现Bash语法非常有用,例如diff <(sort file1) <(sort file2).
diff <(sort file1) <(sort file2)
是否可以在 Makefile 中使用此类 Bash 命令?我在想这样的事情:
file-differences: diff <(sort file1) <(sort file2) > $@
在我的 GNU Make 3.80 中,这将给出一个错误,因为它使用shell而不是bash执行命令。
shell
bash
从 GNU Make 文档中,
5.3.1 Choosing the Shell ------------------------ The program used as the shell is taken from the variable `SHELL'. If this variable is not set in your makefile, the program `/bin/sh' is used as the shell.
所以放在SHELL := /bin/bash你的makefile的顶部,你应该很高兴。
SHELL := /bin/bash
顺便说一句:您也可以为一个目标执行此操作,至少对于 GNU Make。每个目标都可以有自己的变量赋值,如下所示:
all: a b a: @echo "a is $$0" b: SHELL:=/bin/bash # HERE: this is setting the shell for b only b: @echo "b is $$0"
那将打印:
a is /bin/sh b is /bin/bash
有关更多详细信息,请参阅文档中的“目标特定变量值”。该行可以放在 Makefile 中的任何位置,它不必紧挨在目标之前。