[解決済み] 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 ...)
という式があります。この式は空の文字列に解決されますが、行頭にはコマンドを示すタブ文字が残っており、これはルールの外に存在することができません。
タブではなくスペースを使ってインデントするとうまくいくと思うのですが。
関連
-
[解決済み】Makefileにループを書くには?
-
[解決済み】「make」と「make all」の違いとは?
-
[解決済み] Make: LDLIBS, 非推奨?
-
[解決済み] makeファイルの@!の意味は?
-
[解決済み] "make run "への引数の渡し方
-
[解決済み】gcc makefileのエラー。"No rule to make target ..." (ターゲットにするルールがありません)
-
[解決済み】Makeでレシピ行の接頭辞として@、-、+がありますが、これは何でしょうか?
-
[解決済み] Make: コマンドが失敗した後、どのように続行するのですか?
-
[解決済み] makefileで別のターゲットを実行する
-
[解決済み] Makefileの:=と=の違いは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】makefile "そのようなファイルやディレクトリはありません"
-
[解決済み] Make: LDLIBS, 非推奨?
-
[解決済み] makefileの "all "は何の略ですか?
-
[解決済み] PATH "文字列を表示するエコーファイルの作成
-
[解決済み] makeファイルの@!の意味は?
-
[解決済み] GNU Makefile の変数割り当て =, ?=, :=, += の違いは何ですか?
-
[解決済み】Makefileの現在の相対ディレクトリを取得する方法は?
-
[解決済み] Make: コマンドが失敗した後、どのように続行するのですか?
-
[解決済み] CLionでCMakeの代わりにローカルのmakefileを使用する
-
[解決済み] 別のMakefileからMakefileを呼び出すには?