我有以下 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
我有一个包含一些函数 yesdata_util.c
的 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 的转换确实需要依赖于包含该库的原型(prototype)等的 .h 文件
关于c++ - 使用 makefile 在最终可执行文件之前创建库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32192540/