[ < ] [ > ]   [ << ] [] [ >> ]         [冒頭] [目次] [見出し] [ ? ]

B. Makeが生成するエラー

makeが生成する非常に一般的なエラーのリストを示します。またそれらの エラーがどのような意味を持ち、どう対処するかについても示します。

makeのエラーは致命的でない場合もあります。とくにコマンドスクリプト行に プレフィックス-がある場合、あるいはコマンド行に-kオプションが ある場合です。エラーが致命的な場合には、先頭に文字列***がつきます。

エラーメッセージは先頭にプログラムの名前(通常は‘make’)がつくか、 あるいはmakefileでエラーが発見された場合はファイル名と問題のある行番号が つきます。

以下の一覧では、それらの共通のプレフィックスが残されます。

[foo] Error NN
[foo] signal description

これらのエラーは本当はmakeのエラーではありません。 コマンドスクリプトの一部としてmakeが呼び出したプログラムが0でない エラーコード(‘Error NN’)を返し、それをmakeが失敗と 解釈したもの、あるいは何かほかの異常な終了(なんらかのシグナルを伴う)の 仕方をしたという意味です。See section コマンドのエラー.。

メッセージに***がつかず、サブプロセスが失敗している場合は、 makefileのルールは-文字がつきます。その場合はmakeはエラーを 無視します。

missing separator. Stop.
missing separator (did you mean TAB instead of 8 spaces?). Stop.

これは、コマンドを読み込んだmakeがそれを理解できないことを 意味しています。GNUのmakeはさまざまな種類の区切り文字 (:=、タブ文字など)を探してそのコマンド行の認識を 助けようとします。これも、適切なものをみつけられない場合です。

このメッセージのもっとも一般的な理由(非常に便利な、多くのMS-Windowsの エディタの場合のように)は、タブ文字のかわりにスペースを伴う コマンドスクリプトのインデントをしようとする場合です。この場合、 makeは2番目の書式のエラーを使用するでしょう。コマンドスクリプトの すべての行はタブ文字で始める必要があることを覚えておいてください。たとえば、 8つのスペースはカウントされません。See section ルールのシンタックス.。

commands commence before first target. Stop.
missing rule before commands. Stop.

これは、makefileの先頭がコマンドスクリプトの一部のように見えるという 意味です。タブ文字で始まっているものの、(変数の割り当てのような)正しい makeのコマンドが現われない場合です。コマンドスクリプトはつねに ターゲットと関連している必要があります。

行において最初の空白でない文字がセミコロンである場合に2番目の書式が 生成されます。makeはルールのセクション"target: prerequisite"を 残していると解釈します。See section ルールのシンタックス.。

No rule to make target `xxx'.
No rule to make target `xxx', needed by `yyy'.

これは、makeがターゲットのビルドが必要であると判断したものの、 どのようにするかの明示的あるいは暗黙の命令(デフォルトのルールデータベースも 含めて)をmakefileで発見できないことを意味しています。

ファイルのビルドを望む場合、ターゲットがどのようにビルドされるかを記述した ルールをmakefileに追加する必要があります。ほかに考えられる問題の原因は makefileのなかのタイポ(ファイル名が違うなど)、あるいはソースツリーの 不完全さ(ビルドの不要なファイルで、必要条件だけの場合)などです。

No targets specified and no makefile found. Stop.
No targets. Stop.

前者は、コマンド行においてビルドされるべきターゲットを何も提供せず、 makeが読み込むべきmakefileをみつけられなかったことを意味しています。 後者は、なんらかのmakefileはみつかったものの、デフォルトターゲットが何も 含まれていず、コマンドラインでも何も与えられていない場合を意味しています。 GNU makeはこのような状況では何もできません。 See section Makefile指定の引数.。

Makefile `xxx' was not found.
Included makefile `xxx' was not found.

コマンド行で指定されたmakefileがみつからなかった(1番目の書式)か、 インクルードされたmakefileがみつからなかった場合(2番目の書式)。

warning: overriding commands for target `xxx'
warning: ignoring old commands for target `xxx'

GNU makeはターゲットごとに1つだけ指定されるコマンドを許可します (ダブルコロンルールを除いて)。コマンドを持つように定義されているターゲットに コマンドを与えた場合、このワーニングが示され、コマンドの2番目のセットが 最初のセットを上書きしてしまいます。 See section 1つのターゲットに対する複数のルール.。

Circular xxx <- yyy dependency dropped.

これは、ターゲットxxxの必要条件yyyのトレース後に、 makeが依存グラフにおけるループを発見したことを意味します。

Recursive variable `xxx' references itself (eventually). Stop.

これは、通常の(再帰的な)makeの変数xxxを定義して、それが 展開されたときに自身を参照しているということを示します。単純展開変数 (:=)を使用、あるいは追加演算子(+=)の使用のどちらかに おいて許可されないことです。 See section 変数の使用法.。

Unterminated variable reference. Stop.

これは、変数あるいはファンクションの参照で、括弧あるいはブラケットを適切に 閉じていないことを示しています。

insufficient arguments to function `xxx'. Stop.

これは、ファンクションに対して必要な数の引数を与えなかったことを 意味しています。ファンクションの引数についての詳細なドキュメントを 参照してください。See section テキスト変換のためのファンクション.。

missing target pattern. Stop.
multiple target patterns. Stop.
target pattern contains no `%'. Stop.

これらは、静的なパターンルールが機能しない場合に生成されます。最初の意味は、 ルールのターゲットセクションにおいてパターンが何もないことを示しています。 2番目の意味は、ターゲットセクションに複数のパターンがあることを 意味しています。3番目の意味は、ターゲットがパターン文字(%)を 含んでいないことを示しています。 See section 静的パターンルールのシンタックス.。

warning: -jN forced in submake: disabling jobserver mode.

このワーニングは、サブのmakeが通信可能なシステムにおける パラレル実行に関連したエラーをmakeが検出した際に出されます (see section サブのmakeへのオプションの伝達.)。 また、再帰的な呼び出しのmakeプロセスが引数のリストに‘-jN’ (nは1より大きい)を強制的に付加された場合にもこのワーニングが 出されます。たとえば、MAKE環境変数に‘make -j2’とセットした場合に このワーニングが出されます。この場合、サブのmakeはほかのmake プロセスと通信せず、自身が2つのジョブを持つように見せかけるでしょう。

warning: jobserver unavailable: using -j1. Add `+' to parent make rule.

makeプロセスは通信が可能なように、親プロセスが子プロセスに情報を 渡します。子プロセスが実際にはmakeではない場合、これが問題になるため、 親プロセスは、子プロセスがmakeであると認識した場合にだけ情報を渡し ます。親プロセスは通常のアルゴリズムを使用してこの決定を行ないます (see section MAKE変数の働き.)。 子プロセスがmakeであることを親プロセスが知らないでmakefileが 構築される場合、子プロセスは必要な情報の一部しか受け取ることができません。 このような場合、子プロセスはこのワーニングを生成し、連続した方法で そのビルドを継続します。


[ << ] [ >> ]           [冒頭] [目次] [見出し] [ ? ]

この文書は新堂 安孝によって2009年9月22日texi2html 1.82を用いて生成されました。