一:makefile命令规则
(1)targets:prerequlisites
command:
(2)targets:pererqulistes;command
command
eg:
clean
rm -r -f *.c *.o
clean 作为一个labe
rm …是command.
显示规则要求严格按照命令规则来书写。
make有自动命名推导功能。所以可以省略书写。比如clean没有说明依赖文件。-(make会在当前目录下或者是全局环境下自动推导出依赖文件)
而且clean是伪目标————只有执行make clean 的时候才会执行。
在clean中—> *,c中的“ * ”
是一个通配符:表示匹配全部的.c文件----->任意个字符(前面的东西你随意,只要后面是.c就行了)
2、变量的赋值
CC=gcc
就可以使用$(CC)替换gcc
3、自动化变量
eg;
test:test.o test.c test.h
gcc -o $@ $^
等义与:gcc -o test.o test test.h
3、目标文件搜索
VPATH:=src
文件在lib目录下搜索。
eg:
VPATH=src:ooo
test:test.o
gcc -o $@ $^
如果依赖文件不存在于当前目录下,那么他会去当前目录下的子目录下查找。
4、条件判断:
ifeq、ifneq 、ifdef 、ifndef
二、MAKEFILE伪目标。
伪目标的概念表示并不会生成目标文件但是会执行目标下的command
eg:
clean:
rm -f -r *.c *.o
但是如果当前目录下存在一个文件名为clean的文件,那么它就会表示生成目标文件clean由于没有依赖文件那么。就不会执行rm这个command。
我们可以通过申明一个伪目标这样就算目录下有重名文件。它也不会把clean隐式当成同名文件的目标
.PHONY:clean
clean:
rm -r -f *.c
三、函数调用
就是函数后面加参数
字符串替换函数:subst
字符串去空格函数:strip
查找字符串函数:findstring
文件操作函数:
取文件目录函数:
(
d
i
r
<
a
r
g
u
m
e
n
s
>
)
r
e
t
:
.
/
.
.
.
.
.
.
.
.
.
.
O
B
J
=
(dir <argumens>)ret:./.......... OBJ=
(dir<argumens>)ret:./..........OBJ=
四、make命令的书写
-J 表示允许多条指令同时执行。同一时刻多核
五:文件包含
类似于头文件。
include<…>
会先去执行。。。。。的文件。
make嵌套时变量传递使用export:
六: