makefile和make命令一起配合使用,它常常被用来组织c/c++项目的编译。
1,makefile就是一个文件,一般文件名用makefile或者Makefile.(不需要指定解释器,它不是shell)
2,make和makefile,make不指定参数的情况下,默认编译makefile或者Makefile
3,make后面指定参数-f来指定你的makefile的名字,个性化文件名。
4,命令必须用tab键开头。
5,makefile的编写围绕着两个部分:目标文件,依赖文件。
目标文件:依赖文件
6,用@符号将过程掩饰
7,在makefile中只有单行注释,并且注释用#
8,一个makefile中可以有多个目标。
9,如果使用make时,不指定目标,它执行的永远是第一个目标make目标名。
一,makefile变量
变量的定义和shell是一样的 OBJ=file.c
引用方式
shell引用变量:$OBJ或者${OBJ}
makefile引用变量: $(OBJ)
二,基本运算符
= :基本赋值和 :=一样
?= :判断变量是否为第一次定义,如果是就赋值?=后面的值,如果不是,不会进行赋值。
+= :追加,追加是以一个变量内容,内容与内容之间用空格隔开
三,makefile自动推导规则
显示规则:它说明了,如何生成一个或多个的目标文件。这是由makefile的书写者明显指出,要生成的文件,文件的依赖,生成的命令。
隐晦规则:由于我们的make有自动推导的功能,所以隐晦的规则可以让我们比较粗糙地简略地书写makefile,这是由make所支持的。
自动变量:
$@:目标集合
$<:第一个依赖目标.如果依赖目标是多个,逐个表示依赖目标。
$^:所有依赖目标的集合,去除重复依赖的目标。
%:在makefile中%相当于命令里面的*,代表是匹配所有
特殊变量:
CC:代表的是编译器
make
-f:指定文件名
-i:忽略错误,继续往后执行
-j[N]:提高编译速度,make -j8
-C:改变工作目录之后去做一些事情
-r :只证明推导规则的正确,不会编译文件
export:关键字引出来(导出)export PATH=$PATH:/bin/root
四,makefile文件中路径设置(只是针对makefile文件本身自动推导 规则有效)
路径设置关键字; vpath 和VPATH
ar r $@ $^
五,makefile的引用
include 路径+文件名
如果引用的makefile文件中含有与调用引用的makefile中的目标相同的话,内容会被覆盖,调用的内容将不会显示。
实例:
sort : sort.o insert_sort.o
g++ -o sort sort.o insert_sort.o
insert_sort.o : insert_sort.c insert_sort.h
g++ -c insert_sort.c insert_sort.h
sort.o : sort.c
g++ -c sort.c
clean :
rm *.o
rm sort