c++ - 使用 makefile 在最终可执行文件之前创建库

标签 c++ c makefile

我有以下 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.lyesdata.yyesdata_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/

相关文章:

c++ - 涉及模板参数的模板参数

c++ - 自Windows 10 20H1起,多个具有单独线程的窗口停止工作

c - 如何显示字符数组?

linux - 如何在 qmake 中设置库顺序?

c - 使用 VS Code、Makefile 和自定义 bash 脚本在 C 语言中调试头文件

c++ - 从队列中删除第一个元素?

c++ - 销毁未初始化的 FFTW 计划是否安全?

检查 C 中的空行 - 正则表达式

C 编程 - 星号形状

c++ - 如何在生成之前在cmake中执行命令?