Makefile---将目录下所有的.c文件 编译成单独的可执行文件

CC = gcc
SRC = $(wildcard *.c)
BIN = $(SRC:%.c=%)

all : ${BIN}

${BIN}:%:%.c
    ${CC} $^ -o $@

clean:
    rm -rf ${BIN}

.PHONY: all clean

语法说明:

1. SRC = $(wildcard *.c) 

        wildcard搜索当前目录下所有以.c结尾的文件,生成一个以空格间隔的文件名列表,并赋值给SRC。

2. BIN= $(SRC:%.c=%)

        将SRC变量中所有以.c结尾的文件名替换成没有后缀的文件名,然后赋回给OBJ。

        [Note]: 这里用到makefile里的替换规则,即用您指定的变量替换另一个变量,标准格式为:

        $(var:a=b)${var:a=b}

        它的含义是把变量var中的每一个值结尾用b替换掉a

3. ${BIN}:%:%.c

        这儿使用了makefile的静态模式规则 ( 规则存在多个目标,并且不同的目标文件可以根据目标的名字来自动构造出自己的依赖文件。

        静态模式的语法如下:

        < targets ....> : < target-pattern > : < prereq-patterns ...> <commands> .....

        其中:

                targets定义了一些列的目标文件,也就是多目标,可以有通配符,是目标的一个集合。

                target-pattern 是targets的模式,也就是目标集模式

                prereq-patterns 则是目标的“依赖”元素

        以文章开头Makefile中的内容为例进行解释:

${BIN}:%:%.c
    ${CC} $^ -o $@

        其中,${BIN}: 就是目标集合,内容为生成二进制的文件名集合

                   % : 表示${BIN}中文件名的格式,%为模式字符

                   %.c : 表示${BIN}集合的依赖文件的格式,文件名以目标名为基础构造的,并以.c结尾的。

        当${BIN}中有多个目标时,该规则会自动扩展成多个独立的规则。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值