文章目录
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” 参数: 如果规则中的命令出错了, 就 终止该目标规则的执行 ,继续执行其他规则.