我从GNUmakefile
抓住了以下错误,并且我试图理解为什么/bin/sh
被使用:
$ make diff
/bin/sh: 541: Bad file descriptor
rm -f cryptopp563.diff
食谱是:
.PHONY: diff
diff:
-rm -f cryptopp$(LIB_VER).diff
$(shell svn diff -r 541> cryptopp$(LIB_VER).diff)
我知道541的来源。但我不明白为什么我的shell从/bin/bash
更改为/bin/sh
。
$ printenv | grep -i shell
SHELL=/bin/bash
$ cat GNUmakefile | grep SHELL
SHELL ?= /bin/bash
更改shell的位置或原因在哪里?
答案 0 :(得分:2)
?=
运算符仅在没有值的情况下设置变量。如果您总是需要bash,请改为使用=
或:=
。
制作SHELL
与你的SHELL
不一样。
Recipes>中记录了它执行>选择Shell :
与大多数变量不同,变量
SHELL
永远不会从中设置 环境。这是因为使用了SHELL
环境变量 指定您个人选择的shell程序以供交互使用。 像这样的个人选择会影响到这一点,这将是非常糟糕的 makefile的功能。请参阅环境中的变量。