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

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

我正在尝试使用 Fortran 语言编写一个程序make(我有一个生成文件并且,在包含的目录中生成文件,我输入命令$ make target,其中“目标”是系统特定的目标规范,存在于我的生成文件。当我尝试目标规范的各种修订时,在尝试调用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?你能帮我么?谢谢。

答案1

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

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

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

答案2

为了澄清,Make 总是返回三个错误代码之一,如gnu.org:

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

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

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

相关内容