我有以下makefile
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实现此目的?
最佳答案
-fPIC将生成库文件,
因此,-o参数不仅应指示库的名称,
以及该库的放置位置。
abcdef.c文件的编译应该是一个单独的步骤,
abcdef.o文件到abcdef可执行文件的链接需要'-l'参数,以使链接步骤知道该库。
由于该库已经生成,
abcdef.c文件的处理不需要了解有关用于生成库的文件的任何信息。
但是,将abcdef.c转换为abcdef.o确实需要依赖于包含该库的原型的.h文件。