我有涉及yacc
和lex
一個make
爲基礎的項目,但make
正在執行我不期望,不能從我的makefile說明操作:生成文件的YACC和Flex
a.out: lex.yy.o y.tab.o ass3_14CS101.o
gcc lex.yy.o y.tab.o ass3_14CS101.o -lfl
ass3_14CS101.o: ass3_14CS101.c
gcc -c ass3_14CS101.c
lex.yy.o: lex.yy.c
gcc -c lex.yy.c
y.tab.o: y.tab.c
gcc -c y.tab.c
lex.yy.c: ass3_14CS101.l y.tab.h
flex ass3_14CS101.l
y.tab.c: ass3_14CS101.y
yacc -dtv ass3_14CS101.y -W
y.tab.h: ass3_14CS101.y
yacc -dtv ass3_14CS101.y -W
clean:
rm lex.yy.c y.tab.c y.tab.h lex.yy.o y.tab.o ass3_14CS101.o y.output a.out
test:
./a.out < ass3_14CS101_test.c
這裏的輸出一個make
運行:
yacc -dtv ass3_14CS10061.y -W
ass3_14CS10061.y:48.10: warning: empty rule without %empty [-Wempty-rule]
statement : ;
^
flex ass3_14CS10061.l
ass3_14CS10061.l:77: warning, rule cannot be matched
gcc -c lex.yy.c
gcc -c y.tab.c
yacc ass3_14CS10061.y
mv -f y.tab.c ass3_14CS10061.c
gcc -c ass3_14CS10061.c
gcc lex.yy.o y.tab.o ass3_14CS10061.o -lfl
ass3_14CS10061.o: In function `yyparse':
ass3_14CS10061.c:(.text+0x20): multiple definition of `yyparse'
y.tab.o:y.tab.c:(.text+0x289): first defined here
ass3_14CS10061.o: In function `yyerror':
ass3_14CS10061.c:(.text+0x7f6): multiple definition of `yyerror'
y.tab.o:y.tab.c:(.text+0xd61): first defined here
collect2: error: ld returned 1 exit status
make: *** [a.out] Error 1
哪裏的mv -f
命令(大膽線以上)從何而來? Makefile中沒有這樣的命令,並且導致構建失敗。
1.找到再現問題的最小代碼量 - 自己隔離問題(這樣做會經常導致您找到解決方案)2.然後在這裏以適當的格式發佈最簡單的示例。 –
Hi Sayan - 我已經爲你的代碼和輸出應用了一些標記,所以現在閱讀更清晰;但你的問題仍然需要一些工作。如果你可以先自己做一些調查來確定問題的真相(這就是Mark Galeck說的最簡單的例子),這可以幫助人們回答這個問題。 –
這看起來不像一個makefile。格式混亂,也許它看起來更像你的意思。如果這是關於你的makefile,爲什麼添加其他標籤? – Olaf