makefile就是自动化编译,根据时间戳判断文件是否修改
基本格式:
target..:prerequisites...有多个依赖用空格隔开
command
makefile只主动做第一步,要想自动化进行要把最后的目标写道前面
example:
final:a.o b.o c.o
gcc a.o b.o c.o -o final
a.o:a.c
gcc -c a.c -o a.o
b.o:b.c
gcc -c b.c -o b.o
c.o:c.c
gcc -c c.c -o c.o
make target 执行目标
单独make 指的是执行第一个目标,如果第一个目标和目录里的文件重合了那就利用伪目标例如:.ABC:name。
依赖相当于把目标下的命令挪过来执行。
变量
x = a 初始化
$(x) 取值
$$来表示$
example:
X = a.o b.o c.o
final: $X
gcc $(X) -o final
a.o:a.c
gcc -c a.c -o a.o
b.o:b.c
gcc -c b.c -o b.o
c.o:c.c
gcc -c c.c -o c.o
= :是直接赋值最后一个,?=判断是否有值有。。。
写到一半发现有人写的更好
最实用的Makefile教程 真的很简单(搞不明白网上的教程写那么复杂干嘛)-CSDN博客
echo前加@不会显示命令 echo
条件和函数
1.
ifeq ($(ARCH),XXX)
command
else
command
endif
2.
ifdef ARCH
command
endif
系统函数:
$(wildcard 函数名)
$(wildcard *.c) 这个值是所有.c
$(patsubst %.c, %.o, $($(wildcard *.c)) 这个值是所有的.o
define MYFUN
$(0)
$(1)
endif
$(call FUN, param, param1)
Makefile教程(绝对经典,所有问题看这一篇足够了)-CSDN博客
又看到一个写的比我好的