make命令和makefile文件(八)

make命令和makefile文件

1. makefile的语法
2. make命令的选项和参数
3. makefile文件中的注释
4. makefile文件中的宏
5. 多个目标
6. 内置规则
7. 后缀和模式规则
8. 用make管理库函数
9. 高级主题:makefile文件和子目录
10.GUN make和gcc

8.用make管理函数库
对于大型项目,一种比较方便的做法是用函数库来管理多个编译产品。函数库实际上就是文件,它们通常以.a(a是英文archive的首字母)为后缀名,在该文件中包含了一组目标文件。make命令用一个特殊的语法来处理函数库,这使得函数库的管理工作变得非常容易。
用于管理函数库的语法是lib(file.o),它的含义是目标文件file.o是存储在函数库lib.a中的。make命令用一个内置规则来管理函数库,该规则的常见形式如下所示:

.c.a:
	$(CC) -c $(CFLAGS) $<
	$(AR) $(ARFLAGS) $@ $*.O

( A R ) 和 (AR)和 AR(ARFLAGS)的默认取值通常分别是命令ar和选项rv。这个相当简洁的语法告诉make,要想从.c文件得到.a库文件,它必须应用上面两条规则。

  • 第一条规则告诉它必须编译源文件以生成目标文件。
  • 第二条规则告诉它用ar命令将新的目标文件添加到函数库中。

因此,如果有一个名为fud的函数库,其中包含目标文件bas.o,则第一条规则中的 < 将 被 替 换 为 b a s . c , 而 第 二 条 规 则 中 的 <将被替换为bas.c,而第二条规则中的 <bas.c@和 * 将 被 分 别 替 换 为 库 文 件 f u d . a 和 名 字 b a s 。 关 于 *将被分别替换为库文件fud.a和名字bas。 关于 fud.abas@、 * 和 *和 <宏代表的含义:
内置宏定义的含义
实验 管理函数库
在实际应用中,管理函数库规则的使用非常简单。下面将前面例程的2.o 和3.o放入函数库mylib.a中。只需要对Makefile3文件做很少的修改,最终的makefile文件Makefile5如下:


all: myapp

#what compiler
CC = gcc
#Where to install
INSTDIR = /usr/local/bin

#Where are include files kept
INCLUDE = .
#Options for development
CFLAGS = -g -Wall -ansi
#Local Libraries
MYLIB = mylib.a
myapp: main.o $(MYLIB)
        $(CC) -o myapp main.o $(MYLIB)
$(MYLIB):$(MYLIB)(2.o) $(MYLIB)(3.o)
main.o: main.c a.h
2.o: 2.c a.h b.h
3.o: 3.c b.h c.h
clean:
        -rm main.o 2.o 3.o $(MYLIB)
install: myapp
        @if [ -d $(INSTDIR)  ];\
                then \
                cp myapp $(INSTDIR);\
                chmod a+x $(INSTDIR)/myapp;\
                chmod og-w $(INSTDIR)/myapp;\
                echo "Installed in $(INSTDIR)";\
        else \
                echo "Sorry,$(INSTDIR) does not exist";\
        fi

请注意在Makefike5中是如何利用默认规则来完成大部分工作的。下面进行测试。
函数库管理的示意实验解析:
首先,删除所有的目标文件和库文件,然后执行make命令创建myapp。make命令首先编译并创建函数库,然后把main.o和该函数库链接起来以创建myapp。接下来测试目标3.o的依赖规则,它告诉make命令,当文件c.h发生改变时,源文件3.c必须被重新编译。make命令正确地完成了这一工作,它首先编译源文件3.c,然后更新函数库,最后重新链接函数库并创建一个新的可执行文件myapp。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

helmer_hanssen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值