Respostas:
Conforme indicado no manual online , a causa mais comum desse erro é que as linhas são recuadas com espaços quando se make
espera caracteres de tabulação.
target:
\tcmd
onde \t
é TAB (U + 0009)
target:
....cmd
onde cada .
um representa um ESPAÇO (U + 0020).
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 $(
.
0x20
"espaço" lá, está correto?
$
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.
Para mim, o problema era que eu tinha alguns comentários de final de linha # ...
incorporados a uma define ... endef
definição de variável de várias linhas. A remoção dos comentários fez com que o problema desaparecesse.
define
diretiva 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
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))
No meu caso, estava faltando uma guia no meio ifeq
e 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
Eu tinha o arquivo separador ausente no Makefiles gerado pelo qmake. Eu estava portando o código Qt para uma plataforma diferente. Eu não tinha QMAKESPEC nem MAKE definido. Aqui está o link que eu encontrei a resposta:
https://forum.qt.io/topic/3783/missing-separator-error-in-makefile/5
Então, aparentemente, tudo que eu precisava era do pacote "build-essential", para rodar autoconf
primeiro, o que fez o Makefile.pre.in
, então o ./configure
então o make
que funciona perfeitamente ...
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