'makefile:4: *** missing separator. Stop
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?
Solution 1:[1]
On VS Code, just click the "Space: 4" on the downright corner and change it to tab when editing your Makefile.
Solution 2:[2]
By default, you should always write command after a Tab and not white space. This can be changed to another character with .RECIPEPREFIX variable.
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 3:[3]
The solution for PyCharm would be to install a Makefile support plugin:
- Open
Preferences(cmd + ,) - Go to
Plugins->Marketplace - Search for
Makefile support, install and restart the IDE.
This should fix the problem and provide a syntax for a makefile.
Solution 4:[4]
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 5:[5]
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 6:[6]
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 7:[7]
If anyone of you are using a product from Intellij, the solution for this it's the following:
- Go to Preferences > Editor > Code Style
- here you need to select the file type related to your problem. But most probably you need to select
Other File Types. - In the tab opened mark the checkbox for
Use tab characterand be careful,Tab sizeandIndentvalues must be 4.
Solution 8:[8]
You started line 4 with "space,space" instead of "tab" - nothing else.
Solution 9:[9]
The key point was "HARD TAB"
- Check whether you used TAB instead of whitespace
- Check your
.vimrcforset tabstop=X
Solution 10:[10]
Solution 11:[11]
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 12:[12]
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 13:[13]
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.
Solution 14:[14]
Use -A or --show-all to show everything for simplicity.
Solution 15:[15]
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 16:[16]
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 17:[17]
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow



