use*_*756 2 yacc lex makefile bison flex-lexer
我想知道如何使用调用yyparse的Makefile正确编译程序?
这就是我做的:
我有我的编译所有的常规文件Makefile文件,他们必须y.tab.c的或不lex.yy.c中连接(我应该让他们?)
我在我的代码之上执行此操作:
#include "y.tab.c"
#include "lex.yy.c"
#include "y.tab.h"
Run Code Online (Sandbox Code Playgroud)
当我尝试制作程序时会发生这种情况:
当我输入"make"时,它会给我很多警告.一些例子如下所示.
在函数yywrap':
/src/parser.y:12: multiple definition ofyywrap'server.o:/src/parser.y:12:首先在这里定义utils.o:
在函数yyparse':
/src/y.tab.c:1175: multiple definition ofyyparse'server.o:/src/y.tab.c:1175:首先在这里定义utils.o
我得到许多不同的错误,指的是不同的yy _***文件.我已成功编译过去多次调用yyparse,但这次似乎有所不同.这似乎非常像一个包含问题,但我不知道它是什么.我的所有头文件都有ifndef条件.
谢谢你的帮助!
你应该编译 y.tab.c和lex.yy.c,不包括它们.仅在需要它们的源中包含头文件(.h).
然后链接生成的目标文件以生成可执行文件.
project: project.o t.tab.o lex.yy.o foo.o bar.o
y.tab.o: t.tab.c y.tab.h
lex.yy.o: lex.yy.c
# Assuming that you have correct pattern rules setup
# or that the implicit rules will do...
Run Code Online (Sandbox Code Playgroud)
此外,您可以使用make来确保这些文件是相对于生成文件的最新文件:
y.tab.c y.tab.h: project.yacc
$(YACC) $<
lex.yy.c: project.lex
$(LEX) $<
Run Code Online (Sandbox Code Playgroud)
或者根据需要使用更复杂的命令行.
| 归档时间: |
|
| 查看次数: |
3219 次 |
| 最近记录: |