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


26

私が使用してFortranで書かれたプログラムのコンパイルしようとしていますmake(私が持っているMakefileを含むディレクトリにいる間、およびMakefileを、私はコマンドを入力し$ make target、「ターゲット」は、システム固有の目標仕様で、私の中に存在しているMakefileを。として、Iターゲット仕様のさまざまなリビジョンを試してみると、呼び出しを試みるとさまざまなエラーメッセージが表示されることがよくあります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」などのエラーコードの意味のリストを見つける方法を知っていますか?別のWebサイトでこのスレッドを見つけましたが、返信の意味がわかりません。makeエラーコードのシステムに依存しない意味がないということですか?手伝ってくれませんか?ありがとうございました。


回答:


27

エラーコードは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。それが機能しない場合は、メイクファイルを修正する必要があります。


14

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

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

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.