你能解释一下,为什么 Makefile 规则:
clean:
rm -f foo.{bar1,bar2,bar3}
不会导致删除文件:foo.bar1 foo.bar2 和 foo.bar3?我相信我在各种 Makefile 中多次看到过这样的模式,但我目前正在编写自己的 Makefile 并且无法使该规则正常工作(没有文件被删除)。
我正在使用:
- GNU 使 3.81
- GNU 重击 4.1.5
正如我所怀疑的那样,Bash 评估了该模式:
$ echo test.{a,b,c}
test.a test.b test.c
谢谢!
更新
感谢大卫的提示,我找到了上述问题的解决方案。gnu make 默认使用 /bin/sh,这就是为什么 a.{1,2,3} 不被评估为 a.1 a.2 a.3。
要制作“make”,请使用 bash 而不是 sh 在 Makefile 中添加以下行:
SHELL=/bin/bash
从现在开始 a.{1,2,3} 将被视为 a.1 a.2 a.3