犯错误:“ar:Creating ../lib/libmgr.a”

时间:2011-08-11 14:04:13

标签: bash makefile stderr

我有一个bash脚本执行make然后在make写入stderr时中止。代码是这样的:

make all 2>${ERROR_FILE}
ERR=$(cat ${ERROR_FILE})
if [ ! -z "${ERR}" ];
then
    abort "Halted because of errors in make $1: ${ERR}"
fi

但是,make会将以下内容写入文件:

ar: creating ../lib/libmgr.a
ar: creating ../lib/libnet.a
ar: creating ../lib/libeoc.a
ar: creating ../lib/libdvr.a
ar: creating ../lib/libmsg.a
ar: creating ../lib/liblgc.a
ar: creating ../lib/libshm.a
ar: creating ../lib/libsys.a
ar: creating ../lib/librsk.a
ar: creating ../lib/librep.a
ar: creating ../lib/libmdl.a
ar: creating ../lib/libmdb.a
ar: creating ../lib/libdat.a
ar: creating ../lib/libchs.a

这是什么意思?这些错误是什么?如果没有,他们为什么要写入stderr?

3 个答案:

答案 0 :(得分:4)

您可以将-c标志与ar一起使用,以禁止在创建存档时默认写入标准错误的诊断消息。例如:

$ ar -cruv libfoo.a foo.o bar.o baz.o

答案 1 :(得分:0)

它们看起来不像错误,它们看起来像来自ar的消息。如果std err文件非零,为什么要停止?你想停止警告吗?如果没有,您可能希望根据make命令的状态停止(make命令指示错误后的非零$?值)。

答案 2 :(得分:0)

我同意@skjaidev。此外,您还可以更加具体地了解ERR变量中要查找的内容。一种方法是

修改:将参考文献从ar更改为

 make ....
 make_rc=$?
 case "${ERR}" in
    *[Ee][Rr][Rr][Oo][Rr]* )
        # real error, modify or duplicate as needed
        echo "real error" >&2
        exit ${make_rc}
    ;;
    *[Ww][Aa][Rr][Nn]* )
        # modify or duplicate as needed for various warning msgs
        echo "real warning $(echo "$ERR" | grep -i warn) >&2
        # exit ?
    ;;
    * )
      # other stuff
    ;;
 esac

我希望这会有所帮助。