makefile文件 ===> 文件名:makefile或者Makefile
1、 makefile的规则
书写规则:
目标文件:依赖文件
(一个tab键)命令
注意:命令前面的tab键不能用空格代替
目标文件 | 最终要生成的文件 |
依赖文件 | 为了生成目标文件需要的文件 |
命令 | 通过依赖文件生成目标文件的方法 |
例如:
hello: main.c
(tab键)gcc main.c -o hello
运行:执行make命令,执行命令的时候可以加 “-n”,代表不真正执行命令,只是预览将要执行的命令
伪目标的写法:
目标:(空的)
命令
伪目标不会生成目标文件,执行:make名字 执行相应命令
常用:
clean | 清除相关文件 |
all/ALL | 最终要生成的目标,不需要写命令 |
注意:clean的命令前可以加 ‘-’ ,目的:当删除某些文件失败的时候,可以让命令继续执行下去
clean:
(tab键)rm -rf hello
clean:
(tab键)-rm -r hello
2、 执行规则:
1、如果目标文件的时间早于依赖文件,则重新生成目标文件
2、如果依赖文件不存在,则会去找相应的规则生成依赖文件
例如:
all: a.out //最终目标可以有很多个,空格隔开
a.out : main.o add.o
(tab键)gcc main.o add.o -o a.out
main.o:main.c
(tab键)gcc -c main.c -o main.o
add.o:add.c
(tab键)gcc -c add.c -o add.o
makefile中的变量不需要类型,例如: src = abc
取变量的值用
(
变
量
)
=
=
=
>
(变量)===>
(变量)===>(src)===>abc
wildcard $(wildcard *.c) | 匹配当前目录下所有的.c文件 |
patsubst ( p a t s u b s t (patsubst %.c,&.o, (patsubst(src),%.o,$(src)) | 将src中的.c文件换成.o文件 |
例如:
src = $(wildcard *.c) == > src = main.c add.c mul.c sub.c
obj =
(
p
a
t
s
u
b
s
t
(patsubst %.c,&.o,
(patsubst(src),%.o,$(src)) ==> obj = main.o add.o mul.o sub.o
a.out: 1.o add.o sub.o mul.o
gcc 1.o add.o sub.o mul.o -o a.out
a.out: 1.o add.o sub.o mul.o
gcc $(obj) -o a.out
3、 目标文件
$()@ | 代表规则中的目标文件 |
$(^) | 代表规则中的所有依赖文件 |
$(<) | 代表规则中的第一个依赖文件 |
模式匹配:
%.o:%.c
注意:
伪目标最好写在.PHONY后面声明一下,否则如果当前文件夹存在和伪目标相同的文件,则伪目标将失效。