Renjith G
Renjith G

Reputation: 6727

Make error: missing separator

I am getting the following error running make:

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

What is causing this?

Upvotes: 368

Views: 325534

Answers (14)

Evan Carroll
Evan Carroll

Reputation: 1

I had this because I had no colon after PHONY

Not this,

.PHONY install
install:
    install -m0755 bin/ytdl-clean /usr/local/bin

But this (notice the colon)

.PHONY: install
...

Upvotes: 3

Simon Rose
Simon Rose

Reputation: 421

Just to add yet another reason this can show up:

$(eval VALUE)

is not valid and will produce a "missing separator" error.

$(eval IDENTIFIER=VALUE)

is acceptable. This sort of error showed up for me when I had an macro defined with define and tried to do

define SOME_MACRO
... some expression ...
endef

VAR=$(eval $(call SOME_MACRO,arg))

where the macro did not evaluate to an assignment.

Upvotes: 1

dfa
dfa

Reputation: 116412

As indicated in the online manual, the most common cause for that error is that lines are indented with spaces when make expects tab characters.

Correct

target: 
\tcmd

where \t is TAB (U+0009)

Wrong

target:
....cmd

where each . represents a SPACE (U+0020).

Upvotes: 569

Krazy Glew
Krazy Glew

Reputation: 7544

Just for grins, and in case somebody else runs into a similar error:

I got the infamous "missing separator" error because I had invoked a rule defining a function as

($eval $(call function,args))

rather than

$(eval $(call function,args))

i.e. ($ rather than $(.

Upvotes: 25

Nena
Nena

Reputation: 701

In my case, I was actually missing a tab in between ifeq and the command on the next line. No spaces were there to begin with.

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

Should have been:

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

Note the <tab> is an actual tab character

Upvotes: 6

JulieC
JulieC

Reputation: 193

I had the missing separator file in Makefiles generated by qmake. I was porting Qt code to a different platform. I didn't have QMAKESPEC nor MAKE set. Here's the link I found the answer:

https://forum.qt.io/topic/3783/missing-separator-error-in-makefile/5

Upvotes: 1

Pratik
Pratik

Reputation: 1071

In my case, the same error was caused because colon: was missing at end as in staging.deploy:. So note that it can be easy syntax mistake.

Upvotes: 2

Kl3m Michard
Kl3m Michard

Reputation: 33

So apparently, all I needed was the "build-essential" package, then to run autoconf first, which made the Makefile.pre.in, then the ./configure then the make which works perfectly...

Upvotes: -3

Hashimoto
Hashimoto

Reputation: 346

In my case, this error was caused by the lack of a mere space. I had this if block in my makefile:

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

which should have been:

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

with a space after if.

Upvotes: 8

JHarveyJr
JHarveyJr

Reputation: 61

My error was on a variable declaration line with a multi-line extension. I have a trailing space after the "\" which made that an invalid line continuation.

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

Upvotes: 6

Hugues
Hugues

Reputation: 3166

For me, the problem was that I had some end-of-line # ... comments embedded within a define ... endef multi-line variable definition. Removing the comments made the problem go away.

Upvotes: 7

yuliskov
yuliskov

Reputation: 1508

In my case error caused next. I've tried to execute commands globally i.e outside of any target.

UPD. To run command globally one must be properly formed. For example command

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

would become:

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

Upvotes: 3

Jaishree Alavandar
Jaishree Alavandar

Reputation: 45

Following Makefile code worked:

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

Upvotes: -3

unwind
unwind

Reputation: 400029

This is a syntax error in your Makefile. It's quite hard to be more specific than that, without seeing the file itself, or relevant portion(s) thereof.

Upvotes: 8

Related Questions