1. Makefile 语法
生成的文件(targets):依赖的文件(prerequisites )
文件如何生成 (recipe)
test.o : a.o,b.o,c.o gcc -o a.o b.o c.o a.o: a.c gcc -c a.o a.c b.o: b.c gcc -c b.o b.c c.o: c.c gcc -c c.o c.c
其中代码前面的空当不是空格而是Tab
2.可是这个样子太麻烦了如果有很多的文件会写的很长 所以此时我们需要一些通用服去代表所有的文件
test:a.o b.o gcc -o test a.o b.o %.o: %.c gcc -c -o $@ $<
其中 $@ 表示的是目标文件(,o文件)
$<表示的是第一个依赖文件(第一个.c文件)
如果使用$^ 表示所有的依赖文件
test:$^ gcc -o test a.o b.o %.o: %.c gcc -c -o $@ $<
.PHONY 这个是为了当有其他文件被叫做clean的时候执行不了文件 所以需要加上它
3. 立即变量:
A := abc
4. 延迟变量: 只是在使用的时候才赋值 只是会得到最后得值
A = $(C)
C= 124
C= 123
此时A为123
5. append Plus += 不会覆盖原来的值会在后面增加新的值
6. 函数的运用:
A = a b c
B = $(foreach f, $(A), $(f).o)
all:
@echo B = $(B)
把叫A变量里面每个名字叫a b c de文件变成.o的形式
$(filter patent, text)
在字符串中选择符合patent格式的值
$(filter-out patent, text)
在字符串中选择不符合patent格式的值
注意patent 要加%
$(wildcard patent)
是否真实存在像patent格式那样的文件
$(patsubst patent replacement text)
把text中的patent替换成replacement。。