如何在autotools configure中检查shell cmd的返回值

时间:2013-01-17 16:07:45

标签: gnu autoconf m4

我想在配置过程中运行一个shell命令 - 如果此操作的返回值为0,我想使用它。否则,我想退出并显示错误消息。

我写了这样的话:

LOC=$(perl -MExtUtils::Embed -e perl_inc | sed 's/[ \t]*-I//')
RC=$?
AS_IF([ test $RC != 0 ], [AC_MSG_ERROR([Can't find module MExtUtils::Embed in perl. Try installing perl 5.8.8 or above])],)

这不起作用。即使命令失败,RC也总是得到值0。

有谁知道该怎么做?

谢谢

1 个答案:

答案 0 :(得分:2)

问题是你的管道总是成功,因为无论perl做什么,sed都会成功。一种方法是简单地延迟调用sed

LOC=$( perl -MExtUtils::Embed -e perl_inc )
AS_IF([ test $? != 0 ], [AC_MSG_ERROR([...])])
LOC=$( echo "$LOC" | sed 's/[ \t]*-I//' )

另一方面,看起来perl_inc是perl的命令而不是文件的名称,因此将sed中的替换添加到perl中可能更容易。

第三方面,您应该只使用 AX_PROG_PERL_MODULES来查看是否安装了所需的模块。