我有以下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.lyesdata.yyesdata_util.c

如何使用makefile实现此目的?

最佳答案

-fPIC将生成库文件,
因此,-o参数不仅应指示库的名称,
以及该库的放置位置。

abcdef.c文件的编译应该是一个单独的步骤,

abcdef.o文件到abcdef可执行文件的链接需要'-l'参数,以使链接步骤知道该库。

由于该库已经生成,
abcdef.c文件的处理不需要了解有关用于生成库的文件的任何信息。
但是,将abcdef.c转换为abcdef.o确实需要依赖于包含该库的原型的.h文件。

09-07 03:10