1. ホーム
  2. makefile

[解決済み] GNU make で "commands commence before first target" エラーが発生する。

2022-02-06 14:10:35

質問

makefileの中で、ライブラリの存在をチェックし、有益なエラーメッセージを出したいと思っています。ファイルが見つからなかったらmakeを終了するような条件も作りました。

 9: ifeq ($(${JSONLIBPATH}),)
10:    JSONLIBPATH = ${ALTJSONLIBDIR}/${LIBJSON}
11: endif
12: ifeq ($(${JSONLIBPATH}),)
13:    $(error JSON library is not found. Please install libjson before building)
14: endif 

私のmakefileは13行目で詰まってしまいます。

Makefile:13: *** commands commence before first target.  Stop.

13行目以降、私のmakefileにはそのターゲットがあります。

この条件ブロックをターゲットに置いてみた(例えば isJSONLibraryInstalled ) が、これは正しく実行されません。

ターゲットを処理する前に、ファイルの存在を確認し、エラーケースを処理するにはどうしたらよいでしょうか。馬鹿な質問でしたら、申し訳ありません。

どのように解決するのですか?

まず第一に、あなたは現在のパスの名前を持つ変数の内容を見ているわけですが、これはおそらくあなたが望むものではありません。単純な環境変数の参照は $(name) または ${name} ではなく $(${name}) . このため、13行目が常に評価されます。

次に、インデントで詰まっているのだと思います。 $(error ...) という式があります。この式は空の文字列に解決されますが、行頭にはコマンドを示すタブ文字が残っており、これはルールの外に存在することができません。

タブではなくスペースを使ってインデントするとうまくいくと思うのですが。