Linux——makefile

makefile 管理项目,通常直接命名makefile,执行时直接通过 make 命令执行。若命名为其他时,执行需要 make -f 文件名。

规则
ALL:指定 makefile 的最终目标。
目标 : 依赖条件
    命令1
    命令2
    ...

1. 目标的产生时间必须晚于依赖条件的时间,否则,更新目标

2. 依赖条件如果不存在,找寻新的规则去产生依赖条件。

函数

src = $(wildcard ./*.c): 匹配当前工作目录下的所有.c 文件。将文件名组成列表,赋值

给变量 src。如: src = add.c sub.c div1.c

obj = $(patsubst %.c, %.o, $(src)): 将参数 3 中,包含参数 1 的部分,替换为参数 2。

如:obj = add.o sub.o div1.o

clean: (没有依赖)

-rm -rf $(obj) a.out

“-”:作用是,删除不存在文件时,不报错。顺序执行结束。

自动变量

$@: 在规则的命令中,表示规则中的目标。

$^: 在规则的命令中,表示所有依赖条件。

$<: 在规则的命令中,表示第一个依赖条件。如果将该变量应用在模式规则中,它可将依赖条件列表中的依赖依次取出,套用模式规则。

模式规则

%.o:%.c

gcc -c $< -o %@

静态模式规则:

$(obj):%.o:%.c

gcc -c $< -o %@

伪目标:当前文件夹下有 ALL 文件或者 clean 文件时,会导致 makefile 瘫痪,用伪目标来解决。

.PHONY: clean ALL

例:
src = $(wildcard *.c)    当前目录找到所有的.c文件

obj = $(patsubst %.c, %.o, $(src))    src中对应的.C文件对应到.O文件

ALL:a.out        最终目标是获得a.out文件

$(obj):%.o:%.c        静态规则下.c文件编译成对应的.o文件
    gcc -c $< -o $@

a.out:$(obj)
    gcc $^ -o $@

clean:
    -rm -rf $(obj) a.out

.PHONY:clean ALL
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值