web-dev-qa-db-ja.com

エラーを作成:区切り文字がありません

makeの実行中に次のエラーが表示されます。

Makefile:168: *** missing separator.  Stop.

これは何が原因ですか?

203
Renjith G

オンラインマニュアル で示されているように、そのエラーの最も一般的な原因は、makeがタブ文字を予期しているときに行が空白でインデントされることです。

正しい

ターゲット:
\tcmd 

ここで、\ tはTABです

違う

 target:
 cmd 
310
dfa

にやにや笑いのため、そして誰か他の人が同様のエラーに遭遇した場合:

関数を次のように定義するルールを呼び出したため、悪名高い「区切り文字がありません」というエラーが表示されました。

($eval $(call function,args))

のではなく

$(eval $(call function,args))

つまり、($eval $(call...ではなく$(eval $(call...です。

12
Krazy Glew

これはMakefileの構文エラーです。ファイル自体、またはその関連部分を見ることなく、それよりも具体的にすることは非常に困難です。

8
unwind

私のエラーは、複数行の拡張子を持つ変数宣言行にありました。 「\」の後に後続スペースがあり、これが無効な行継続になりました。

MY_VAR = \
   val1 \ <-- 0x20 there caused the error.
   val2
3
JHarveyJr

私にとっての問題は、# ...複数行変数定義内に行末のdefine ... endefコメントが埋め込まれていることでした。コメントを削除すると、問題はなくなりました。

2
Hugues

私の場合、次にエラーが発生しました。コマンドをグローバルに、つまりターゲットの外部で実行しようとしました。

UPD。コマンドをグローバルに実行するには、適切に形成する必要があります。例のコマンド

ln -sf ../../user/curl/$SRC_NAME ./$SRC_NAME

になるだろう:

$(Shell ln -sf ../../user/curl/$(SRC_NAME) ./$(SRC_NAME))
1
yuliskov

私の場合、:のようにコロンstaging.deploy:が最後に欠落していたため、同じエラーが発生しました。そのため、簡単な構文ミスになる可能性があることに注意してください。

0
Pratik

どうやら、必要なのは「ビルド必須」パッケージだけで、次にautoconfを実行し、Makefile.pre.inを作成し、次に./configureを作成し、次にmakeを作成します完璧に...

0
Kl3m Michard

私の場合、このエラーは単なるスペースの不足が原因でした。私のメイクファイルでこれをブロックしました:

if($(METHOD),opt)
CFLAGS=
endif

あるべきだった:

if ($(METHOD),opt)
CFLAGS=
endif

ifの後にスペースがあります。

0
Hashimoto