【发布时间】:2015-08-24 22:08:56
【问题描述】:
我有以下生成文件
all: yesdata
CFLAGS=-fPIC
lex.yy.c: yesdata.l yesdata.tab.h
flex yesdata.l
yesdata.tab.c yesdata.tab.h: yesdata.y
bison -d yesdata.y
yesdata: lex.yy.c yesdata.tab.c yesdata.tab.h yesdata_util.c
gcc $(CFLAGS) -o yesdata yesdata.tab.c yesdata_util.c lex.yy.c -lyesdata -lyesprocess -ltest -ltestconf
clean:
rm yesdata yesdata.tab.c lex.yy.c yesdata.tab.h
我的lex 文件是yesdata.l
我的 yacc 文件是yesdata.y
我有一个 C 文件,其中包含一些函数 yesdata_util.c。
上面的makefile 将其编译成一个名为yesdata 的二进制文件。
现在main() 入口函数在yesdata.y 中定义。我想将 main() 移动到另一个 C 文件,比如 abcdef.c
我想编译 abcdef.c 并将该 C 文件链接到文件
yesdata.l,yesdata.y 和 yesdata_util.c.
如何使用 makefile 实现这一点?
【问题讨论】:
-
强烈建议修改makefile,使每个.c文件单独编译,链接步骤是单独的(并且取决于.c文件编译步骤中的目标文件。
-
您是特别想与词法分析器和解析器创建一个共享库(以便将它们与多个程序链接),还是只想将它们编译为与包含 main 的文件不同的目标文件然后将所有内容联系在一起?因为如果是后者,您可以执行类似
yesdata: yesdata.tab.o lex.yy.o main.o$(CC) $^ -o $@之类的操作。您已经拥有的规则将创建 yesdata.tab.o 和 lex.yy.o,默认规则将用于将它们编译为目标文件,然后通过上述行链接。