Makefile如下:
THIS.txt : foo.txt
grep THIS foo.txt > $@
当grep输出为空(foo.txt中没有这个)时,make会给出错误消息,bash不会:
$ make
make:*** [THIS.txt] Error 1
$ grep THIS foo.txt > THIS.txt
$ grep THIS foo.txt 2>&1
为什么?当grep
输出为空时,我应该如何修改我的makefile以避免出现错误消息?
答案 0 :(得分:13)
grep
在bash中没有出错,但 会返回非零退出代码:
> grep THIS foo.txt 2>&1
> echo $?
1
如果你想摆脱那个非零退出代码,以便make
不会将其标记为错误,你可以这样做:
THIS.txt : foo.txt
grep THIS foo.txt > $@ || true
|| true
位表示“如果存在非零退出代码,则返回true
的退出代码(在bash中始终为0
)。