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

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  [email protected]  $<$
## 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