make
が生成し、垣間見る事になるであろうもっとも共通なエラーのリストとそのエラー修復方法についての情報を示します。
特に行の先頭に-
があったり、-k
コマンドラインオプションが指定された場合は、make
エラーが致命的にならない事があります。致命的なエラーについては***
という文字列を前につけています。
エラーメッセージはどれも(大抵は`make'という)プログラムの名前が前についているか、或いはmakefileにエラーがある場合にはファイルの名前と行番号を問題報告に含めるかしてあります。
下の表では共通な前文は除外しています。
make
のエラーとは全く違うものです。これはmake
がコマンドスクリプトの一部で呼び出したプログラムが0以外のエラーコード(`Error NN')を返したという意味で、make
がこれを失敗と解釈したか、(ある種のシグナルを伴った)別の以上な方法で終了したかになります。
***
がメッセージについていないなら、サブ処理は失敗したがmakefileのルールで-
という特別な文字が前についていたためmake
がそのエラーを無視したという事です。
make
の一般的な「はぁ?」というエラーメッセージです。make
がmakefileのその行の解析に完全に成功しなかったという事であり、基本的には「構文エラー」という意味です。
このメッセージが出力されるのは、あなた(か、おそらく、多くのMS-Windowsのエディタなどのような、とっても助けになるエディタ)がタブ文字の代わりにスペースでコマンドスクリプトをインデント(字下げ)しようと試みていた、というのが最も一般的な理由の一つです。
コマンドスクリプトの行はすべて、絶対にタブ文字で始まらなければならない事を憶えておいて下さい。8つのスペースは含めてはならないのです。
make
で定められたコマンドが見当たらない、という事です。コマンドスクリプトはターゲットに常に関連していなければなりません。
生成される第二の要因は、セミコロンが空白ではない最初の文字として行にある場合で、make
はこれを行の"ターゲット: 依存関係"の項目を省いたと解釈します。
make
がターゲットをビルドする必要があると判断したのにビルド方法について(デフォルトルールデータベースの中も含めて)明示的・暗黙にmakefileで指示が全く見つからなかったという意味です。
そのファイルをビルドしたいならmakefileにそのターゲットがどうやってビルドされるかを述べるルールを追加する必要があるでしょう。原因として考え得るその他の可能性は、(ファイル名が間違っているといった場合の)makefileの誤植や(ビルドがサポートされていないファイルで、依存関係だけにあるという場合の)ソースツリーの堕落です。
make
が読み込むmakefileを全く検出できなかったという意味です。後者はmakefileはいくつか見つかったがデフォルトターゲットが含まれていなくてコマンドラインでも与えられなかったという意味です。こういう状況ではGNU make
は全くすることがありません。
make
は(二重コロンルールは例外ですが)ターゲット一つにつきコマンドを一度だけ指定する事が許されています。既にコマンドを持たせて定義してあるターゲットにコマンドを与えた場合にこの警告が出て最初のコマンド群を第二のコマンド群で上書きすることになります。
make
が依存関係の図にループがあるのを見破ったという意味で、xxxというターゲットのyyyという依存関係を追跡するとその依存関係などのどれか一つがxxxに依存しているという事です。
make
変数をそこで定義していて、展開されたときに自分自身(xxx)を参照する事になる、という意味です。
これは許されていない事であるため、単純展開変数(:=
)か追加オペレータ(+=
)かのどちらかを用いてください。
%
)を含まないターゲットという意味です。