Erro: separador ausente

234

Estou recebendo o seguinte erro em execução make:

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

O quê está causando isto?

Renjith G
fonte
Isso responde sua pergunta? makefile: 4: *** separador ausente. Stop
SS Anne

Respostas:

364

Conforme indicado no manual online , a causa mais comum desse erro é que as linhas são recuadas com espaços quando se makeespera caracteres de tabulação.

Corrigir

target: 
\tcmd

onde \té TAB (U + 0009)

Errado

target:
....cmd

onde cada .um representa um ESPAÇO (U + 0020).

dfa
fonte
4
Você pode usar .RECIPEPREFIX para alterar o uso de caracteres. Veja: gnu.org/software/make/manual/html_node/…
aseq
16

Apenas para sorrisos, e no caso de alguém encontrar um erro semelhante:

Eu recebi o infame erro "separador ausente" porque invoquei uma regra que define uma função como

($eval $(call function,args))

ao invés de

$(eval $(call function,args))

ou seja, em ($vez de $(.

Krazy Glew
fonte
O que? :) Eu acho que você não tinha 0x20"espaço" lá, está correto?
precisa saber é o seguinte
3
@ user35443 A colocação de$
smac89
8

Este é um erro de sintaxe no seu Makefile. É muito difícil ser mais específico do que isso, sem ver o arquivo em si ou partes relevantes.

descontrair
fonte
5

Para mim, o problema era que eu tinha alguns comentários de final de linha # ...incorporados a uma define ... endefdefinição de variável de várias linhas. A remoção dos comentários fez com que o problema desaparecesse.

Hugues
fonte
Obrigado. Eu não sabia que os comentários na definediretiva são tratados literalmente. Na verdade, o comportamento não é explicado na documentação . (Para fins de clareza: incorporar um sinal numérico #à diretiva não é, por si só, um erro de sintaxe. Mas não é interpretado como o início de um comentário, portanto, é provável que isso
aconteça
3

Meu erro ocorreu em uma linha de declaração variável com uma extensão de várias linhas. Eu tenho um espaço à direita após o "\", que tornou essa continuação de linha inválida.

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

No meu caso, erro causado a seguir. Eu tentei executar comandos globalmente, ou seja, fora de qualquer destino.

UPD. Para executar o comando globalmente, é preciso estar adequadamente formado. Por exemplo comando

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

se tornaria:

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

No meu caso, o mesmo erro foi causado porque dois pontos :estavam ausentes no final como em staging.deploy:. Portanto, observe que pode ser um erro de sintaxe fácil.

Pratik
fonte
1

No meu caso, estava faltando uma guia no meio ifeqe o comando na próxima linha. Não havia espaços para começar.

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

Deveria ter ficado:

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

Observe que <tab>é um caractere de tabulação real

Nena
fonte
0

No meu caso, esse erro foi causado pela falta de um mero espaço. Eu tinha isso se bloco no meu makefile:

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

que deveria ter sido:

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

com um espaço depois de se.

Hashimoto
fonte
-1

Então, aparentemente, tudo que eu precisava era do pacote "build-essential", para rodar autoconfprimeiro, o que fez o Makefile.pre.in, então o ./configureentão o makeque funciona perfeitamente ...

Kl3m Michard
fonte
-2

O seguinte código Makefile funcionou:

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
Jaishree Alavandar
fonte