make
の実行中に次のエラーが表示されます。
Makefile:168: *** missing separator. Stop.
これは何が原因ですか?
オンラインマニュアル で示されているように、そのエラーの最も一般的な原因は、make
がタブ文字を予期しているときに行が空白でインデントされることです。
ターゲット: \tcmd
ここで、\ tはTABです
target: cmd
にやにや笑いのため、そして誰か他の人が同様のエラーに遭遇した場合:
関数を次のように定義するルールを呼び出したため、悪名高い「区切り文字がありません」というエラーが表示されました。
($eval $(call function,args))
のではなく
$(eval $(call function,args))
つまり、($eval $(call...
ではなく$(eval $(call...
です。
これはMakefileの構文エラーです。ファイル自体、またはその関連部分を見ることなく、それよりも具体的にすることは非常に困難です。
私のエラーは、複数行の拡張子を持つ変数宣言行にありました。 「\」の後に後続スペースがあり、これが無効な行継続になりました。
MY_VAR = \
val1 \ <-- 0x20 there caused the error.
val2
私にとっての問題は、# ...
複数行変数定義内に行末のdefine ... endef
コメントが埋め込まれていることでした。コメントを削除すると、問題はなくなりました。
私の場合、次にエラーが発生しました。コマンドをグローバルに、つまりターゲットの外部で実行しようとしました。
UPD。コマンドをグローバルに実行するには、適切に形成する必要があります。例のコマンド
ln -sf ../../user/curl/$SRC_NAME ./$SRC_NAME
になるだろう:
$(Shell ln -sf ../../user/curl/$(SRC_NAME) ./$(SRC_NAME))
私の場合、:
のようにコロンstaging.deploy:
が最後に欠落していたため、同じエラーが発生しました。そのため、簡単な構文ミスになる可能性があることに注意してください。
どうやら、必要なのは「ビルド必須」パッケージだけで、次にautoconf
を実行し、Makefile.pre.in
を作成し、次に./configure
を作成し、次にmake
を作成します完璧に...
私の場合、このエラーは単なるスペースの不足が原因でした。私のメイクファイルでこれをブロックしました:
if($(METHOD),opt)
CFLAGS=
endif
あるべきだった:
if ($(METHOD),opt)
CFLAGS=
endif
ifの後にスペースがあります。