铁血联盟2源码学习笔记--Makefile边看边学2

本文深入探讨了Makefile中的高级技巧,包括不同类型的变量赋值、依赖项生成及潜规则应用等内容。通过实例讲解了如何利用这些特性来提高Makefile的编写效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

话接上篇

116 SRCS :=
117 SRCS += Build/AniViewScreen.cc

这里又出现了一个设置符':='。与常见的编程语言不一样,'='后如果接别的变量,这个右值变量是不会立即展开的;它只在你要使用这个变量时才展开。例如
SRC = $(OBJ)
OBJ = TEST.O
$(error $SRC)
输出的会是TEST.O而不是空。这样做的好处可能是简单编写时不用考虑顺序?坏处是你不能使用 'SRC = $SRC TEST2' 这样的语句,因为这会导致递归展开。而新的设置符':='就相当于一般编程语言中的等号了,它是立即展开的。

461 DEPS = $(filter %.d, $(SRCS:.c=.d) $(SRCS:.cc=.d))

这句给变量DEPS赋值的语句,实际上调用了3个函数,$(filter pattern...,text)是一个。这个函数是过滤函数,它提出符合pattern的词。
'$(SRCS:.c=.d)'是函数$(patsubst pattern,replacement,text)的缩写形式。它将SRCS中所有.c换成.d。
整个这条语句是生成了一个c和c++文件的依赖文件名表。JA2的这个Makefile,并没有写出c文件和头文件的依赖关系,这种依赖关系是靠depend命令由GCC自动生成的。

464 .SUFFIXES:
465 .SUFFIXES: .c .cc .d .o

SUFFIXES是一个特殊的目标。它规定了Make可以在'潜规则'中使用的下标。464行用来清除默认的下标表,465行设置成需要的。

483 .c.o:
484 @echo '===> CC $<'
485 $(Q)$(CC) $(CCFLAGS) -c $< -o $@
这三行就是SUFFIXES潜规则的应用。它的目标是任意的.o文件,它的源是同名的C文件。
不过这种写法已经不推荐了。现在推荐使用通配符形式:

%.o : %.c foo.h

这样更直观,而且可以加入特定文件(foo.h)。
下面的语句中我发现了sed程序和正则表达式,还是留待明天再研究吧。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值