跟我一起写makefile-10(使用make更新函数库文件)

转载 2007年09月21日 11:33:00
使用make更新函数库文件
———————————

函数库文件也就是对Object文件(程序编译的中间文件)的打包文件。在Unix下,一般是由命令"ar"来完成打包工作。

一、函数库文件的成员

一个函数库文件由多个文件组成。你可以以如下格式指定函数库文件及其组成:

    archive(member)

这个不是一个命令,而一个目标和依赖的定义。一般来说,这种用法基本上就是为了"ar"命令来服务的。如:

    foolib(hack.o) : hack.o
            ar cr foolib hack.o

如果要指定多个member,那就以空格分开,如:

    foolib(hack.o kludge.o)

其等价于:

    foolib(hack.o) foolib(kludge.o)

你还可以使用Shell的文件通配符来定义,如:

    foolib(*.o)


二、函数库成员的隐含规则

当make搜索一个目标的隐含规则时,一个特殊的特性是,如果这个目标是"a(m)"形式的,其会把目标变成"(m)"。于是,如果我们的成员是"%.o"的模式定义,并且如果我们使用"make foo.a(bar.o)"的形式调用Makefile时,隐含规则会去找"bar.o"的规则,如果没有定义bar.o的规则,那么内建隐含规则生效,make会去找bar.c文件来生成bar.o,如果找得到的话,make执行的命令大致如下:

    cc -c bar.c -o bar.o
    ar r foo.a bar.o
    rm -f bar.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命令在同一时间运行在同一个函数库打包文件上,就很有可以损坏这个函数库文件。所以,在make未来的版本中,应该提供一种机制来避免并行操作发生在函数打包文件上。

但就目前而言,你还是应该不要尽量不要使用"-j"参数。 
 

跟我一起写 Makefile(10)使用make更新函数库文件

免责声明:首先感谢写这组文章的前辈,带我走进Makefile 的殿堂,为了能够给跟多人快速了解的机会,我暂且将这几篇文章发到个人博客上,大家可以自己尝试,如果系统出现问题本人不负任何法律责任!如果喜欢...
  • shushengbaoguo
  • shushengbaoguo
  • 2013年08月10日 00:29
  • 443

跟我一起写 Makefile (十)——使用make更新函数库文件

使用make更新函数库文件 ——————————— 函数库文件也就是对Object文件(程序编译的中间文件)的打包文件。在Unix下,一般是由命令"ar"来完成打包工作。 一、函数库文件的成员 一个函...
  • qq361301276
  • qq361301276
  • 2011年05月04日 11:57
  • 514

跟我一起写makefile 之使用make更新函数库文件

使用make更新函数库文件 函数库文件也就是对Object文件(程序编译的中间文件)的打包文件。在Unix下,一般是由命令"ar"来完成打包工作。 函数库文件的成员 一个函数库文件由多个文...
  • zmlcool
  • zmlcool
  • 2012年09月06日 22:38
  • 366

【makefile】一起写makefile(九)--使用make更新函数库文件

使用make更新函数库文件 ——————————— 函数库文件也就是对Object文件(程序编译的中间文件)的打包文件。在Unix下,一般是由命令"ar"来完成打包工作。 一、函数库文件的成员 一...
  • baidu_39511645
  • baidu_39511645
  • 2017年10月16日 13:39
  • 70

和我一起从零学 WorkFlow 引言

最近公司要基于 windows workflow foundation 4.0 (以后简称WF)开发一套基础的工作流活动,由于本人之前只是简单了解WF,并不懂WF开发所以要从零学起! 在这里给愿...
  • wxnjob
  • wxnjob
  • 2012年09月12日 21:54
  • 1009

Linux makefile 教程 --- 跟我一起写 Makefile

最近在学习Linux下的C编程,买了一本叫《Linux环境下的C编程指南》读到makefile就越看越迷糊,可能是我的理解能不行。             于是google到了以下这篇文章。通俗易懂。...
  • MacanS
  • MacanS
  • 2017年03月11日 10:37
  • 338

make(九)使用make更新函数库文件

待续...
  • first_wolf
  • first_wolf
  • 2013年06月12日 21:23
  • 479

跟我一起学C++之C++介绍(笔记)

C++介绍 为什么学习C++?  1.C++能提升性能,C++之父BjarneStroustrup戏称C++可以减轻全球变暖问题。  2.编程语言需求总结为四个:效率(efficiency)、灵活(f...
  • kongshuai19900505
  • kongshuai19900505
  • 2016年05月25日 23:24
  • 402

跟我一起写 Makefile-------------------- 作者:陈皓 ---- 整理:祝冬华

跟我一起写 Makefile 作者:陈皓 跟我一起写 Makefile 作者:陈皓 整理:祝冬华 第 1 页共 78 页 2005 年 10 月 14 日整理:祝冬华跟我一起写 Makefil...
  • zhibudefeng
  • zhibudefeng
  • 2011年10月15日 11:29
  • 4003

跟我一起学CMake

CMake是一个很强大的工具,在这里以一个学习者的身份来和大家一起学习,可以让大家更快的学习和领会这个强大工具...
  • aysycd
  • aysycd
  • 2014年05月30日 10:53
  • 1033
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:跟我一起写makefile-10(使用make更新函数库文件)
举报原因:
原因补充:

(最多只允许输入30个字)