There is the original file(in English) here.
最初,前,次,最後のページ,目次 に移動.
make
が生成し、垣間見る事になるであろうもっとも共通なエラーのリストとそのエラー修復方法についての情報を示します。
特に行の先頭に-
があったり、-k
コマンドラインオプションが指定された場合は、make
エラーが致命的にならない事があります。致命的なエラーについては***
という文字列を前につけています。
エラーメッセージはどれも(大抵は`make'という)プログラムの名前が前についているか、或いはmakefileにエラーがある場合にはファイルの名前と行番号を問題報告に含めるかしてあります。
下の表では共通な前文は除外しています。
- `[foo] Error NN'
-
- `[foo] signal description'
-
これらのエラーは実際には
make
のエラーとは全く違うものです。これはmake
がコマンドスクリプトの一部で呼び出したプログラムが0以外のエラーコード(`Error NN')を返したという意味で、make
がこれを失敗と解釈したか、(ある種のシグナルを伴った)別の以上な方法で終了したかになります。
***
がメッセージについていないなら、サブ処理は失敗したがmakefileのルールで-
という特別な文字が前についていたためmake
がそのエラーを無視したという事です。
- `missing separator. Stop.'(訳:セパレータが欠落。停止します。)
-
これは
make
の一般的な「はぁ?」というエラーメッセージです。make
がmakefileのその行の解析に完全に成功しなかったという事であり、基本的には「構文エラー」という意味です。
このメッセージが出力されるのは、あなた(か、おそらく、多くのMS-Windowsのエディタなどのような、とっても助けになるエディタ)がタブ文字の代わりにスペースでコマンドスクリプトをインデント(字下げ)しようと試みていた、というのが最も一般的な理由の一つです。
コマンドスクリプトの行はすべて、絶対にタブ文字で始まらなければならない事を憶えておいて下さい。8つのスペースは含めてはならないのです。
- `commands commence before first target. Stop.'(訳:最初のターゲットの前にコマンドが開始されました。停止します。)
-
- `missing rule before commands. Stop.'(訳:コマンド前のルールの欠落。停止します。)
-
これはmakefileの最初がコマンドスクリプトの一部になっているようだという意味です。つまりタブ文字で始まっていて(変数式のような)
make
で定められたコマンドが見当たらない、という事です。コマンドスクリプトはターゲットに常に関連していなければなりません。
生成される第二の要因は、セミコロンが空白ではない最初の文字として行にある場合で、make
はこれを行の"ターゲット: 依存関係"の項目を省いたと解釈します。
- `No rule to make target `xxx'.'(訳:`xxx'というターゲットを作成するルールは存在しません。)
-
- `No rule to make target `xxx', needed by `yyy'.'(訳:`yyy'に必要な`xxx'というターゲットを作成するルールが存在しません。)
-
これは
make
がターゲットをビルドする必要があると判断したのにビルド方法について(デフォルトルールデータベースの中も含めて)明示的・暗黙にmakefileで指示が全く見つからなかったという意味です。
そのファイルをビルドしたいならmakefileにそのターゲットがどうやってビルドされるかを述べるルールを追加する必要があるでしょう。原因として考え得るその他の可能性は、(ファイル名が間違っているといった場合の)makefileの誤植や(ビルドがサポートされていないファイルで、依存関係だけにあるという場合の)ソースツリーの堕落です。
- `No targets specified and no makefile found. Stop.'(訳:ターゲットが指定されておらず、makefileも見つかりませんでした。停止します。)
-
- `No targets. Stop.'(ターゲットなし。停止します。)
-
前者はコマンド行でビルドするターゲットを全く与えておらず
make
が読み込むmakefileを全く検出できなかったという意味です。後者はmakefileはいくつか見つかったがデフォルトターゲットが含まれていなくてコマンドラインでも与えられなかったという意味です。こういう状況ではGNU make
は全くすることがありません。
- `Makefile `xxx' was not found.'(訳:`xxx'というMakefileが見つかりませんでした。)
-
- `Included makefile `xxx' was not found.'(訳:インクルードされている`xxx'というmakefileは見つかりませんでした。)
-
コマンドライン(前者)かインクルード(後者)で指定されているmakefileが見つかりませんでした。
- `warning: overriding commands for target `xxx''(訳:(警告)`xxx'というターゲットへのコマンドを上書きします。)
-
- `warning: ignoring old commands for target `xxx''(訳:(警告)`xxx'というターゲットへの古いコマンドを無視します。)
-
GNU
make
は(二重コロンルールは例外ですが)ターゲット一つにつきコマンドを一度だけ指定する事が許されています。既にコマンドを持たせて定義してあるターゲットにコマンドを与えた場合にこの警告が出て最初のコマンド群を第二のコマンド群で上書きすることになります。
- `Circular xxx <- yyy dependency dropped.'(訳:xxx <- yyyで依存関係の堂々巡りになる。)
-
これは
make
が依存関係の図にループがあるのを見破ったという意味で、xxxというターゲットのyyyという依存関係を追跡するとその依存関係などのどれか一つがxxxに依存しているという事です。
- `Recursive variable `xxx' references itself (eventually). Stop.'(訳:`xxx'という再帰変数が(最終的に)自分自身を参照しています。停止します。)
-
xxxという通常の(再帰の)
make
変数をそこで定義していて、展開されたときに自分自身(xxx)を参照する事になる、という意味です。
これは許されていない事であるため、単純展開変数(:=
)か追加オペレータ(+=
)かのどちらかを用いてください。
- `Unterminated variable reference. Stop.'(訳:不完全な変数参照。停止します。)
-
これは変数や関数の参照で閉じ括弧や閉じ大括弧を適切につけるを忘れている、という意味です。
- `insufficient arguments to function `xxx'. Stop.'(訳:xxxという関数への引数が不十分。停止します。)
-
これは、その関数に対して引数が必要な個数分与えられていないという意味です。引数の説明については関数のドキュメントを見て下さい。
- `missing target pattern. Stop.'(訳:ターゲット型の欠落。停止します。)
-
- `multiple target patterns. Stop.'(訳:複数のターゲット型。停止します。)
-
- `target pattern contains no `%'. Stop.'(訳:ターゲット型に`%'がない。停止します。)
-
これらは奇妙な静的な型ルールに対して生成されます。最初のものはルールのターゲット部分で型が全くないという意味で、二番目はターゲット部分に型が複数あるという意味、三番目は型に使う文字(
%
)を含まないターゲットという意味です。
最初,前,次,最後のページ,目次 に移動.