目录
1.makefile的用法:
创建makefile:
vi Makefile
运行用make(一个路径下只能有一个Makefile)
在Makefile中,
命名规范:
目标文件1:依赖文件1
(Tab键)依赖文件1怎么生成目标文件1的(也就是用依赖文件生成目标文件的方法)
目标文件2:依赖文件2
(Tab键)依赖文件2怎么生成目标文件2的
注意:
(1)目标文件1和目标文件2没有关联的话,默认只执行目标文件1
(2)一个Makefile中可以有多个目标文件
(3)在调用make时,需要我们指定要运行的目标是什么,不然只运行目标文件1
上图中:mingling1中并没有和mingling2有联系,只执行mingling1
注意:直接echo不把echo当做命令,要在前边加@符号
上图中:命令从下往上输出
注意:在Makefile中,命令从下往上运行
2.假目标
假目标:就是在Makefile中有一个目标文件与创建Makefile路径的的某一个文件名字相同,会不执行Makefile中的目标文件
解决方法:在Makefile中的名字相同的目标文件前加.PHONY
3.预定义变量
CC:c编辑器的名称,默认为cc
CFLAGS :c编辑器的选项,无默认值
RM :文件删除默认选项,默认为rm -rf
4.自定义变量
OBJ 和 OBJS :一个用于存放可执行文件,一个存放所有的目标文件(.o文件)
5.自动变量
$@ :目标文件
$< :表示第一个依赖文件
$^ :表示所有的依赖文件
6.变量定义的两种方式
6.1 递归方式 (VAR=var)
用递归方式时,某一个值后面改变也会影响前边改变
上图中:a在后边变了,前边的b,c也随之改变
6.2 简单方式(VAR:=var)
上图中,用加了:的简单方式,后边值的改变对前边的不影响
7.嵌套Makefile
(1)创建文件夹:
include 放.h文件
src 放.c文件
obj 放.c文件生成的.o文件
bin 放.o文件生成的可执行文件
(2)编写总控Makefile,先书写自定义变量和预定义变量
上图中的export表示下行的Makefile文件中也可以用,不用再进行书写
(3)编写src中的Makefile文件,将所有的.c文件生成.o文件
上图中mv的意思是将所有的.o文件移动到obj文件夹中
(4)在obj文件中编写Makefile文件,将所有的.o文件汇集生成可执行文件,并将其移动到bin目录下
(5)再次编写总控Makefile文件,先执行src中的Makefile文件将所有的.c文件生成.o文件,再执行obj中的Makefile文件,将所有的.o文件编译汇集成一个可执行文件