it-swarm.cn

在哪里可以找到“ make”错误代码列表?

我正在尝试使用make编译用Fortran编写的程序(我有一个Makefile,并且在包含Makefile,我输入命令$ make target,其中“ target”是系统特定的目标规范,它存在于我的Makefile中。当我尝试对目标规范进行各种修订时,尝试调用make时常常会收到各种错误消息。举几个例子:

make[1]: Entering directory
/bin/sh: line 0: test: too many arguments
./dpp   angfrc.f > angfrc.tmp.f
/bin/sh: ./dpp: Permission denied
make[1]: *** [angfrc.o] Error 126
make[1]: Leaving directory
make: *** [cmu60] Error 2

make[1]: Entering directory
/bin/sh: line 0: test: too many arguments
./dpp -DSTRESS -DMPI -P -D'pointer=integer'-I/opt/mpich_intel/include  angfrc.f > angfrc.tmp.f
/bin/sh: ./dpp: Permission denied
make[1]: *** [angfrc.o] Error 126
make[1]: Leaving directory 
make: *** [mpich-c2] Error 2

make[1]: Entering directory 
/bin/sh: line 0: test: too many arguments
./dpp -DSTRESS -DMPI -P -D'pointer=integer' -I/opt/mpich_intel/include  angfrc.f > angfrc.tmp.f
/bin/sh: ./dpp: Permission denied
make[1]: *** [angfrc.o] Error 126
make[1]: Leaving directory 
make: *** [mpi-intel] Error 2

您是否知道如何找到错误代码(例如“错误126”和“错误2”)的含义的列表?我在另一个网站上找到了 此线程 ,但是我不确定答复的含义。这是否意味着make错误代码没有系统无关的含义?你能帮我么?谢谢。

27
Andrew

错误代码不是来自make:make正在报告失败命令的返回状态。您需要查看每个命令的文档以了解每个状态值的含义。除了0 =成功,其他命令=失败之外,大多数命令都不会打扰其他区别。

在您的每个示例中,都无法执行./dpp。发生这种情况时,尝试调用它的Shell退出,并显示状态码126(这是 标准行为 )。 Shell运行中的make实例检测到失败的命令(Shell)并退出,显示Error 126。 make的实例本身是make的父实例执行的命令,并且make实用程序在错误时返回2,因此父make报告Error 2

您的构建失败可能源于test: too many arguments。这可能是makefile中的语法错误,也可能是由于当您拥有不是bash的/bin/sh时依赖于bash特定的功能。尝试运行make Shell=/bin/bash targetmake Shell=/bin/ksh target;如果那不起作用,则需要修复makefile。

28

为了明确起见,Make总是返回三个错误代码之一,如 gnu.org 所示:

  • 0:退出状态为“成功”
  • 2:遇到错误
  • 1:将响应返回到-q(问题)标志,指示目标需要更新

您可以通过运行上面的示例(假设您仍然有2011年的示例)来进行测试,然后在终端中运行echo $?以打印先前的返回代码。

Make会打印出遇到的其他错误代码(例如您找到的126),但是如果遇到错误,它将始终返回错误代码2。

15
Timothy Clifford