3 回答
TA贡献1824条经验 获得超6个赞
从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/bashmakefile的顶部,您应该一切顺利。
顺便说一句:您也可以针对一个目标执行此操作,至少对于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中的任何地方进行,而不必紧接在目标文件之前。
TA贡献1856条经验 获得超17个赞
您可以bash直接调用,使用-c标志:
bash -c "diff <(sort file1) <(sort file2) > $@"
当然,您可能无法重定向到变量$ @,但是当我尝试执行此操作时,我收到-bash: $@: ambiguous redirect一条错误消息,因此您可能想在深入了解它之前先进行研究(尽管我使用bash 3.2.something,所以也许您的工作原理有所不同)。
TA贡献1810条经验 获得超5个赞
无需显式将SHELL变量设置为指向bash,就可以执行此操作。如果您有许多makefile,这将很有用,因为SHELL不会被后续的makefile继承或从环境中获取。您还需要确保任何编译您的代码的人都以这种方式配置他们的系统。
如果运行sudo dpkg-reconfigure dash并对提示回答“否”,则系统将不使用破折号作为默认外壳程序。然后它将指向bash(至少在Ubuntu中)。请注意,虽然使用破折号作为系统外壳会更有效。
- 3 回答
- 0 关注
- 1159 浏览
添加回答
举报