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

话接上篇

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程序和正则表达式,还是留待明天再研究吧。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值