Makefile变量

Makefile变量
上面示例的Makefile在实际中是几乎不存在的,因为它过于简单,仅包含两个文件和一
个命令,在这种情况下完全不必要编写Makefile 而只需在Shell 中直接输入即可,在实际中
使用的Makefile往往是包含很多的文件和命令的,这也是Makefile产生的原因。下面就可给
出稍微复杂一些的Makefile进行讲解:
sunq:kang.o yul.o
Gcc kang.o yul.o -o sunq

kang.o : kang.c kang.h head.h
Gcc –Wall –O -g –c kang.c -o kang.o
yul.o : yul.c head.h
Gcc - Wall –O -g –c yul.c -o yul.o
在这个Makefile中有3 个目标体(target),分别为sunq、kang.o和yul.o,其中第一个目
标体的依赖文件就是后两个目标体。如果用户使用命令“make sunq”,则make管理器就是找
到sunq目标体开始执行。
这时,make会自动检查相关文件的时间戳。首先,在检查“kang.o”、“yul.o”和“sunq”
3 个文件的时间戳之前,它会向下查找那些把“kang.o”或“yul.o”作为目标文件的时间戳。

 

下面给出了上例中用变量替换修改后的Makefile,这里用OBJS代替kang.o和yul.o,用
CC代替Gcc,用CFLAGS代替“-Wall -O –g”。这样在以后修改时,就可以只修改变量定义,
而不需要修改下面的定义实体,从而大大简化了Makefile维护的工作量。
经变量替换后的Makefile如下所示:
OBJS = kang.o yul.o
CC = Gcc
CFLAGS = -Wall -O -g
sunq : $(OBJS)
$(CC) $(OBJS) -o sunq
kang.o : kang.c kang.h
$(CC) $(CFLAGS) -c kang.c -o kang.o
yul.o : yul.c yul.h
$(CC) $(CFLAGS) -c yul.c -o yul.o

 

Makefile中常见自动变量
命 令 格 式 含 义
$*   不包含扩展名的目标文件名称
$+   所有的依赖文件,以空格分开,并以出现的先后为序,可能包含重复的依赖件
$<   第一个依赖文件的名称

$?    所有时间戳比目标文件晚的依赖文件,并以空格分开续表
$@    目标文件的完整名称
$^    所有不重复的依赖文件,以空格分开
$%    如果目标是归档成员,则该变量表示目标的归档成员名称

 

自动变量的书写比较难记,但是在熟练了之后会非常的方便,请读者结合下例中的自动
变量改写的Makefile进行记忆。
OBJS = kang.o yul.o
CC = Gcc
CFLAGS = -Wall -O -g
sunq : $(OBJS)
$(CC) $^ -o $@
kang.o : kang.c kang.h
$(CC) $(CFLAGS) -c $< -o $@
yul.o : yul.c yul.h
$(CC) $(CFLAGS) -c $< -o $@

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值