Makefile入门
-
makefile命名: makefile 或者 Makefile
-
1个规则
-
目标:依赖条件
- (一个tab缩进)命令
-
目标的时间必须晚于依赖条件的时间,否则就会更新目标
-
依赖条件如果不存在,找寻新的规则去产生依赖
-
makefile会默认把第一条指令当做最终目标
-
可以使用ALL:a.out,来指定最终的生成目标
-
-
2个函数
- 函数:wildcard
- src = $(wildcard *.c) == ( src = add.c div1.c hello.c sub.c)
- 匹配当前工作目录下所有的.c文件,将文件名组成列表,赋值给变量src
- 函数:patsubst
- 将参数3中,包含参数1的部分,替换成参数2
- obj = $(patsubst %.c, %.o, $(src))
- obj = add.o sub.o div1.o
- clean:
- rm -rf ${obj}
- 使用 make clean -n 这里使用-n可以模拟一下看看哪些要删的
- 函数:wildcard
-
3个自动变量
-
$@: 在规则命令中表示规则中的目标
-
$^: 在规则的命令中,表示所有的依赖条件
-
$<:在规则的命令中,表示第一个依赖条件,如果该变量应用在模式规则中,它可以依赖条件列表中依赖依次去除,套用模式规则。
src = $(wildcard *.c) #add.c sub.c div1.c hello.c obj = $(patsubst %.c, %.o, $(src)) # add.o sub.o div1.o hello.o ALL:a.out a.out:$(obj) gcc $^ -o $@ hello.o:hello.c gcc -c $< -o $@ add.o:add.c gcc -c $< -o $@ sub.o:sub.c gcc -c $< -o $@ div1.o:div1.c gcc -c $< -o $@ clean: -rm -rf $(obj) a.out
-
-
模式规则:
-
%.o:%c可以替换下面所有
%.o:%.c gcc -c $< -o %@ hello.o:hello.c gcc -c $< -o $@ add.o:add.c gcc -c $< -o $@ sub.o:sub.c gcc -c $< -o $@ div1.o:div1.c gcc -c $< -o $@
-
-
静态模式规则:
- $(obj):%o:%c
- gcc -c $< -o %@
- $(obj):%o:%c
-
伪目标
- .PHONY: clean ALL
-
可以加警告和调试
-
myargs = -Wall -g
gcc -c $< -o $@ $(myargs)
-