web-dev-qa-db-ja.com

「make」エラーコードのリストはどこにありますか?

Fortranで書かれたプログラムをmakeを使用してコンパイルしようとしています(Makefileがあり、Makefile、私はコマンド$ make targetを入力します。ここで、「target」はシステム固有のターゲット指定であり、myMakefile。ターゲット仕様のさまざまなリビジョンを試すと、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」などのエラーコードの意味のリストを見つける方法を知っていますか。別のウェブサイトで this thread を見つけましたが、返信の意味がわかりません。システムに依存しないmakeエラーコードの意味がないということですか?手伝ってくれませんか?ありがとうございました。

27
Andrew

エラーコードはmakeからのものではありません。makeは失敗したコマンドの戻りステータスを報告しています。各ステータス値の意味を理解するには、各コマンドのドキュメントを参照する必要があります。ほとんどのコマンドは、0 =成功、それ以外の場合=失敗以外の区別はありません。

いずれの例でも、./dppは実行できません。これが発生すると、それを呼び出そうとしたシェルはステータスコード126で終了します(これは 標準の動作 です)。実行中のmakeのインスタンスが、シェルが失敗したコマンド(シェル)を検出して終了し、Error 126を表示します。 makeのインスタンス自体は、makeの親インスタンスによって実行されるコマンドであり、makeユーティリティはエラー時に2を返すため、親makeはError 2を報告します。

ビルドの失敗は、test: too many argumentsが原因である可能性があります。これは、メイクファイルの構文エラーであるか、bashでない/bin/shがある場合にbash固有の機能に依存していることが原因である可能性があります。 make Shell=/bin/bash targetまたはmake Shell=/bin/ksh targetを実行してみてください。それが機能しない場合は、メイクファイルを修正する必要があります。

明確にするために、Makeは常に gnu.org に記載されている3つのエラーコードのいずれかを返します。

  • 0:終了ステータスは「成功」です
  • 2:エラーが発生しました
  • 1:-q(質問)フラグへの応答を返し、ターゲットの更新が必要であることを示します

これをテストするには、上記の例を実行し(2011年から引き続き使用している場合)、ターミナルでecho $?を実行して前の戻りコードを出力します。

Makeは、発生した他のエラーコード(検出した126など)を出力しますが、エラーが発生した場合は常に2のエラーコードを返します。

15