makefile:4: *** missing separator. Stop

CMakefile

C Problem Overview


This is my makefile:

all:ll

ll:ll.c   
  gcc  -c  -Wall -Werror -02 c.c ll.c  -o  ll  $@  $<

clean :
  \rm -fr ll
 

When I try to make clean or make make, I get this error:

:makefile:4: *** missing separator.  Stop.

How can I fix it?

C Solutions


Solution 1 - C

make has a very stupid relationship with tabs. All actions of every rule are identified by tabs. And, no, four spaces don't make a tab. Only a tab makes a tab.

To check, I use the command cat -e -t -v makefile_name.

It shows the presence of tabs with ^I and line endings with $. Both are vital to ensure that dependencies end properly and tabs mark the action for the rules so that they are easily identifiable to the make utility.

Example:

Kaizen ~/so_test $ cat -e -t -v  mk.t
all:ll$      ## here the $ is end of line ...                   
$
ll:ll.c   $
^Igcc  -c  -Wall -Werror -02 c.c ll.c  -o  ll  $@  $<$ 
## the ^I above means a tab was there before the action part, so this line is ok .
 $
clean :$
   \rm -fr ll$
## see here there is no ^I which means , tab is not present .... 
## in this case you need to open the file again and edit/ensure a tab 
## starts the action part

Solution 2 - C

On VS Code, just click the "Space: 4" on the downright corner and change it to tab when editing your Makefile.

Solution 3 - C

You should always write command after a Tab and not white space.

This applies to gcc line (line #4) in your case. You need to insert tab before gcc.

Also replace \rm -fr ll with rm -fr ll. Insert tabs before this command too.

Solution 4 - C

The solution for PyCharm would be to install a Makefile support plugin:

  1. Open Preferences (cmd + ,)
  2. Go to Plugins -> Marketplace
  3. Search for Makefile support, install and restart the IDE.

This should fix the problem and provide a syntax for a makefile.

Solution 5 - C

Using .editorconfig to fix the tabs automagically:

root = true

[*]
charset = utf-8
end_of_line = lf
insert_final_newline = true
indent_style = space
indent_size = 4

[Makefile]
indent_style = tab

Solution 6 - C

TLDR;

makefile syntax can be quirky
if you want a line of code to be interpreted as make code it must only be indented with spaces.
if you want a line of code to be interpreted as bash code it must only be indented with tabs

sometask:
  ifeq ($FOO,bar)  // this is make code. only spaces
    echo "foobar"  // this is bash code. only tabs
  endif            // again, this is make code. only spaces

technically its the leading indentation that dictates the interpreter.

Solution 7 - C

Its pretty old question but still I would like say about one more option using vi/vim editor to visualize the tabs. If you have vi/vim installed then open a Makefile (e.g. vim Makefile) and enter :set list. This will show number of tabs inserted as below,

 %-linux: force$
^I@if [ "$(GCC_VERSION)" = "2.96" ] ; then \$
^I^Iecho ===== Generating build tree for legacy $@ architecture =====; \$
^I^I$(CONFIGURE) $(CWD) $@ legacy; \$
^Ielse \$
^I^Iecho ===== Generating build tree for $@ architecture =====; \$
^I^I$(CONFIGURE) $(CWD) $@; \$
^Ifi$
^Icd build-$@;make$

Solution 8 - C

The key point was "HARD TAB"

  1. Check whether you used TAB instead of whitespace
  2. Check your .vimrc for set tabstop=X

Solution 9 - C

If anyone of you are using a product from Intellij, the solution for this it's the following:

  1. Go to Preferences > Editor > Code Style
  2. here you need to select the file type related to your problem. But most probably you need to select Other File Types.
  3. In the tab opened mark the checkbox for Use tab character and be careful, Tab size and Indent values must be 4.

Solution 10 - C

You started line 4 with "space,space" instead of "tab" - nothing else.

Solution 11 - C

If you are using mcedit for makefile edit. you have to see the following mark. enter image description here

Solution 12 - C

This is because tab is replaced by spaces. To disable this feature go to

gedit->edit->preferences->editor

and remove check for

"replace tab with space"

Solution 13 - C

If you are here searching how to make the tabs and new lines you added understandable by vim you have to first enable tab in vim.

You can do it using :set noet i.e. (to switch from spaces to TAB) before you make your tab additions.

With this command your tabs will look like the other ones (i.e. ^I) and *** missing separator. Stop. error from make will go away :)

after you make changes you can switch back with :set et

Solution 14 - C

If you are editing your Makefile in eclipse:

Windows-> Preferences->General->Editor->Text Editors->Show Whitespace Characters -> Apply

Or use the shortcut shown below.

Tab will be represented by gray ">>" and Space will be represented by gray "." as in figure below.

enter image description here

Solution 15 - C

Use -A or --show-all to show everything for simplicity.

Solution 16 - C

If someone ever comes across this issue with

*** missing separator.  Stop.

during the build, they should double-check their path, it should not contain special characters like "#"

Solution 17 - C

Do yourself a favour and make this a permanent member of your .editorconfig, if your editor/IDE supports it (it probably does!)

[Makefile]
indent_style = tab

Solution 18 - C

When you created a Makefile in VSCode, You should set the Tab Size: 4enter image description here.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionRahul ReddyView Question on Stackoverflow
Solution 1 - CAppleBee12View Answer on Stackoverflow
Solution 2 - CS. WuView Answer on Stackoverflow
Solution 3 - CDenny MathewView Answer on Stackoverflow
Solution 4 - CTomasz BartkowiakView Answer on Stackoverflow
Solution 5 - CDaniel W.View Answer on Stackoverflow
Solution 6 - CWeezyKrushView Answer on Stackoverflow
Solution 7 - CPanchView Answer on Stackoverflow
Solution 8 - CwlshericaView Answer on Stackoverflow
Solution 9 - CBogdan Alexandru MilitaruView Answer on Stackoverflow
Solution 10 - CPetr KosvanecView Answer on Stackoverflow
Solution 11 - Criguang zhengView Answer on Stackoverflow
Solution 12 - CShrinivas PatgarView Answer on Stackoverflow
Solution 13 - Cyosemite_kView Answer on Stackoverflow
Solution 14 - CRoseView Answer on Stackoverflow
Solution 15 - CjtonyView Answer on Stackoverflow
Solution 16 - C Lonedone View Answer on Stackoverflow
Solution 17 - CJan KlanView Answer on Stackoverflow
Solution 18 - Chesam rajaeiView Answer on Stackoverflow