Makefile学习笔记

Makefile笔记

2020.7.8

1, clean 任务

clean都时放在文件的最后

.PHONY:clean      # 声明伪目标
clean:
	rm *.o temp   #命令要以tab开头,清除.o结束的文件和temp文件
	#或-rm *.o temp   #rm前的-表示某些文件出现问题不用管,继续后面的操作

2, 将所有目标文件都写在一个Makefile中,只用 make 就执行全部 – 伪目标

all:prog1 prog2 prog3	# makefile中的第一个目标会被当做默认目标.令其依赖于其他三个目标,即可用make执行全部任务
# 目标, 伪目标都可以成为依赖
.PHONY:all			# 设定其为伪目标,因为没有对应文件生成

prog1:prog1.o utils.o
	cc -o prog1 prog1.o utils.o

prog2:...

3, 多目标 (多个目标同时依赖于一个文件 )

bigoutput littleoutput:text.g
generate text.g -$(subst output,,$@) > $@
# -$的$:表示执行一个makefile函数,函数名为subst,后面为参数
# subst 函数:截取字符串,
# $@ :表示目标的集合,依次取出目标,并执行于命令

# 等价于
bigoutput:text.g
	generate text.g -big > bigoutput
littleoutput:text.g
	generate text.g -little > littleoutput
静态模式
# 语法
<targets ...>:<target-parttern>:<prereq-patterns ...>
	<commands>
...

# 示例
objects = foo.o bar.o

all:$(objects)

$(objects): %.o: %.c
$(CC) -c $(CFLAGS) $< -o $@
# %.o:表示要所有以 ".o"结束的目标
# $<:表示所有的依赖目标集
# $@:表示所有的目标集

#等价于
foo.o:foo.c
$(CC) -c $(CFLAGS) foo.c -o foo.o
bar.o:bar.c
$(CC) -c $(CFLAGS) bar.c -o bar.o

若希望第二条命令在第一条命令的基础上执行, 则不能写成两行,应该将两条命令写在一行,用 分号 隔开

exec:
	cd /home/yang;pwd

命令出错

命令前加 “-”, 标记命令为不管是否出错都认为成功, 从而继续向下执行

clean:
	-rm -f *.o

全局方法: make 加上 “-i” 或 “–ignore-errors” 参数

  • 以".IGNORE" 作为目标的,则这个规则中的所有命令将会忽略错误
  • make命令的 “-k” 或 “–keep-going” 参数: 如果规则中的命令出错了, 就 终止该目标规则的执行 ,继续执行其他规则.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值