make工具与函数库
函数库文件是对Object文件(程序编译的中间文件)的打包文件。在Linux下,一般由命令ar来完成打包工作。
函数库文件的成员
一个函数库文件由多个文件组成,可以以如下格式指定函数库文件及其组成
archive(member)
不是命令。是一个目标和依赖的定义。这种用法是为ar命令来服务的。
编译函数库:
abclib(data.o):data.o
ar cr put data.o
生成函数库文件put
如果要指定多个member,以空格分开
函数库成员的隐含规则
当make搜索一个目标的隐含目标时,一个特殊的特性是如果这个目标是a(m)形式的,则会把目标变成(m)。当成员是以%.o的模式定义时,如果使用make abc.a(abc.o)的形式调用Makefile,隐含规则回去找abc.o的规则;如果没有定义abc.o的规则,那么内建隐含规则生效,make去找abc.c文件来生产abc.o
函数库文件的后缀规则
可以使用后缀规则和隐含规则来生成函数库打包文件
例:
.c.a:
$(CC) $(CFLAGS) $(CPPFLAGS)-c $< -o &*.o
$(AR)r $@ $*.o
$(RM)$*.o
#等效于
(%.o):%.c
$(CC) $(CFLAGS) $(CPPFLAGS)-c $< -o &*.o
$(AR)r $@ $*.o
$(RM)$*.o
注意
小心使用make的并行机制(-j参数)。如果多个ar命令在同一时间运行在同一个函数库打包文件上,就可能损坏这个函数库文件。