エラーを作成:セパレーターがありません


回答:


364

オンラインマニュアルに示されているように、そのエラーの最も一般的な原因は、makeタブ文字が必要な場合に行がスペースでインデントされることです。

正しい

target: 
\tcmd

どこ \tですかTAB(U + 0009)

違う

target:
....cmd

ここで、それぞれ.がスペース(U + 0020)を表します。


4
.RECIPEPREFIXを使用して、文字の用途を変更できます。参照:gnu.org/software/make/manual/html_node/...
aseq

16

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

次のように関数を定義するルールを呼び出したため、悪名高い「セパレーターがありません」エラーが発生しました

($eval $(call function,args))

のではなく

$(eval $(call function,args))

つまり、と($いうより$(


何?:)あなたは0x20そこに「スペース」を持っていなかったと思います、それは正しいですか?
user35443

3
@ user35443の配置$
smac89 2016年

8

これは、Makefileの構文エラーです。ファイル自体またはその関連部分を確認せずに、それより具体的に特定することは非常に困難です。


5

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


ありがとうございました。defineディレクティブのコメントが文字通り扱われることを知りませんでした。実際の動作はドキュメントで説明されいません。(明確にするために#、ディレクティブ内に番号記号を埋め込むこと自体は構文エラーではありません。しかし、これはコメントの開始として解釈されないだけなので、間違いを起こしやすいものです。)
ynn

3

私のエラーは、複数行の拡張子を持つ変数宣言行でした。「\」の後に末尾のスペースがあるため、無効な行が続いています。

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

1

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

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

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

になるだろう:

$(shell ln -sf ../../user/curl/$(SRC_NAME) ./$(SRC_NAME))

1

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


1

私の場合、実際には間にタブがあり、次の行のコマンドがありませんでしたifeq。そもそもスペースはありませんでした。

ifeq ($(wildcard $DIR_FILE), )
cd $FOLDER; cp -f $DIR_FILE.tpl $DIR_FILE.xs;
endif

になるはずだった:

ifeq ($(wildcard $DIR_FILE), )
<tab>cd $FOLDER; cp -f $DIR_FILE.tpl $DIR_FILE.xs;
endif

これ<tab>は実際のタブ文字であることに注意してください


0

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

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

あるはずです:

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

ifの後にスペースを入れます。



-1

どうやら、私が必要なのは、「ビルドに不可欠な」パッケージだけでした。次に、autoconf最初に実行して、を作成しMakefile.pre.in、次に、./configuremake完全に機能させました...


-2

以下のMakefileコードが機能しました:

obj-m = hello.o

all:
    $(MAKE) -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules 

clean:
    $(MAKE) -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.