makefile的格式
目标文件:依赖文件
生成目标文件的命令(此行前面必须要有一个缩进!)
…
执行makefile:make命令
命令从下向上依次执行
makefile中的自动变量
&<:规则中的第一个依赖
$@:规则中的目标文件
$^:规则中的所有依赖
只能在规则的命令中使用
main:main.c
gcc main.c -o main
add.o:add.c
gcc -c add.c
mul.o:mul.c
gcc -c mul.c
sub.o:sub.c
gcc -c sub.c
使用自动变量简化
obj=main.o add.o sub.o mul.o
target=main
CC=gcc
$(target):$(obj)
$(CC) $(obj) -o $(target)
%.o:%.c
$(CC) -c $< -o $@
makefile自己维护的变量
CC = cc(gcc);//默认值为gcc,可以更改成其他编译器如g++
CPPFLAGS//预编译时需要的选项如 -I
CFLAGS//编译时需要的参数 -Wall -g -c
LDFLAGS//链接库时使用的选项 -L -l
makefile的工作原理
首先开始查找生成目标文件的依赖项文件是否存在,不存在则往下一命令查找,循环下去
如果执行了makefile之后对依赖文件进行了修改,则依赖文件的生成时间比目标文件晚,就会执行命令对目标文件进行更新,依次向上。
makefile中的函数
所以的makefile提供的函数都有返回值
获取指定目录下的某种类型的文件:
src=
(
w
i
l
d
c
a
r
d
.
/
∗
.
c
)
将
指
定
文
件
替
换
成
另
一
个
文
件
,
第
三
个
参
数
为
将
要
被
替
换
的
文
件
o
b
j
=
(wildcard ./*.c) 将指定文件替换成另一个文件,第三个参数为将要被替换的文件 obj=
(wildcard./∗.c)将指定文件替换成另一个文件,第三个参数为将要被替换的文件obj=(pasubst ./%.c , ./%.o , $(src))
- .PONY 声明伪目标,.PONY:clean,添加这条命令后就不会与本地磁盘的clean文件哪个更新
- rm -f ————强制执行
- 在命令前添加一个-,如-mkdir /aa,即使这条命令执行失败也会继续执行