这个Makefile有什么问题?

neu*_*cer 4 makefile

当我在以下Makefile上运行make all时出现此错误:

Makefile:5:***缺少分隔符.停止.

这有什么问题,我该如何解决?

LEX = lex
YACC = yacc 
CC = gcc
calcu: y.tab.o lex.yy.o
$(CC) -o calcu y.tab.o lex.yy.o -ly -lfl
y.tab.c y.tab.h: parser.y
$(YACC) -d parser.y
y.tab.o: y.tab.c parser.h
$(CC) -c y.tab.c
lex.yy.o: y.tab.h lex.yy.c 
$(CC) -c lex.yy.c
lex.yy.c: calclexer.l parser.h
$(LEX) calclexer.l
clean:
rm *.o
rm *.c
rm calcu
Run Code Online (Sandbox Code Playgroud)

Rob*_*lls 11

天儿真好,

您需要制表符来缩进每个目标下方的行.

LEX = lex
YACC = yacc 
CC = gcc
calcu: y.tab.o lex.yy.o
    $(CC) -o calcu y.tab.o lex.yy.o -ly -lfl
y.tab.c y.tab.h: parser.y
    $(YACC) -d parser.y
y.tab.o: y.tab.c parser.h
    $(CC) -c y.tab.c
lex.yy.o: y.tab.h lex.yy.c 
    $(CC) -c lex.yy.c
lex.yy.c: calclexer.l parser.h
    $(LEX) calclexer.l
clean:
    rm *.o
    rm *.c
    rm calcu
Run Code Online (Sandbox Code Playgroud)

BTW一般惯例是你应该为宏使用大括号而不是括号.使用括号是将对象替换回存档所遗留下来的遗留问题.所以上面更好地表达为:

LEX = lex
YACC = yacc 
CC = gcc
calcu: y.tab.o lex.yy.o
    ${CC} -o calcu y.tab.o lex.yy.o -ly -lfl
y.tab.c y.tab.h: parser.y
    ${YACC} -d parser.y
y.tab.o: y.tab.c parser.h
    ${CC} -c y.tab.c
lex.yy.o: y.tab.h lex.yy.c 
    ${CC} -c lex.yy.c
lex.yy.c: calclexer.l parser.h
    ${LEX} calclexer.l
clean:
    rm *.o
    rm *.c
    rm calcu
Run Code Online (Sandbox Code Playgroud)

HTH


Jer*_*ten 7

你需要像这样缩进.(注意:他们将我的标签更改为4空格.请确保使用制表符缩进.)

LEX = lex
YACC = yacc 
CC = gcc

calcu: y.tab.o lex.yy.o
    $(CC) -o calcu y.tab.o lex.yy.o -ly -lfl

y.tab.c y.tab.h: parser.y
    $(YACC) -d parser.y

y.tab.o: y.tab.c parser.h
    $(CC) -c y.tab.c

lex.yy.o: y.tab.h lex.yy.c 
    $(CC) -c lex.yy.c

lex.yy.c: calclexer.l parser.h
    $(LEX) calclexer.l

clean:
    rm *.o
    rm *.c
    rm calcu
Run Code Online (Sandbox Code Playgroud)

额外的空白行不是必需的,但缩进是.all如果你愿意,你还需要制定规则make all.


Gre*_*ill 5

通常,这种错误意味着在Makefile中缩进行时错误地使用了空格而不是制表符.

您的示例似乎已粘贴而没有缩进,但我无法判断您的文件是否真的如此或是否存在粘贴错误.在下面的:

calcu: y.tab.o lex.yy.o
        $(CC) -o calcu y.tab.o lex.yy.o -ly -lfl

之前的空格$(CC)必须是制表符,而不是空格:

calcu: y.tab.o lex.yy.o
        $(CC) -o calcu y.tab.o lex.yy.o -ly -lfl
|tab-->|