Search code examples
cmakefile

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

  • make defines a tab is required to start each recipe. All actions of every rule are identified by tabs. If you prefer to prefix your recipes with a character other than tab, you can set the .RECIPEPREFIX variable to an alternate character.

    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