目录
一:make工具
人们通常利用 make 工具来自动完成编译工作这些工作包括:如果仅修改了某几个源文件,则只重新编译这几个源文件如果某个头文件被修改了,则重新编译所有包含该头文件的源文件利用这种自动编译可大大简化开发工作,避免不必要的重新编译
二:Makefile
make 工具通过一个称为 makefile 的文件来完成并自动维护编译工作
makefile 需要按照某种语法进行编写,其中说明了如何编译各个源文件并连接生成可执行文件,并定义了源文件之间的依赖关系
当修改了其中某个源文件时,如果其他源文件依赖于该文件,则也要重新编译所有依赖该文件的源文件
三:Makefile基本规则
TARGET … : DEPENDENCIES …COMMAND…
1.目标(TARGET)程序产生的文件,如可执行文件和目标文件 -o;目标也可以是要执行的动作,如“clean”。2.依赖(DEPENDENCIES)是用来产生目标的输入文件,一个目标通常依赖于多个文件。3.命令(COMMAND)是make执行的动作,一个可以有多个命令,每个占一行。注意:每个命令行的起始字符必须为TAB字符!
如果DEPENDENCIES中有一个或多个文件更新的话,COMMAND就要执行,这就是Makefile最核心的内容
四:make是如何工作的
1、make会在当前目录下找名字叫“Makefile”或“makefile”
2、如果找到,它会找文件中的第一个目标文件(target),在上面的例子中,他会找到“main”这个文件,并把这个文件作为最终的目标文件
3、如果main文件不存在,或是main所依赖的后面的 .o 文件的文件修改时间要比main这个文件新,那么,他就会执行后面所定义的命令来生成main这个文件
4、如果main所依赖的.o文件也存在,那么make会在当前文件中找目标为.o文件的依赖性,如果找到则再根据那一个规则生成.o文件
5、当然,你的C文件和H文件是存在的啦,于是make会生成 .o 文件,然后再用 .o 文件make的终极任务,也就是执行文件main了
注:如果DEPENDENCIES中有一个或多个文件更新的话,COMMAND就要执行,这就是Makefile最核心的内容
五:示例(五个阶段的Makefile)
5.1 第一阶段Makefile
第一阶段Makefile示例如下
示例详细过程:
1.使用vim编辑器 编写makefile vim xxx
vim makefile
2.执行make make
make
3.删除所有.o文件 rm
rm *.o main
4.执行make 一键编译 make
make
1.查看发现 make编译后又生成.o文件 ls
ls
2.运行可执行文件 ./main
./main
3.make一键编译[报出已是最新]
可以修改hello.c 后再make一键编译
查看一下编译结果
1.预览查看makefile[第一阶段的makefile] cat makefile
cat makefile
2.使用vim编辑器 编写makefile vim makefile
vim makefile
3.make已是最新
make clean(clean组建清除结果查看)
make 全部重建
4.预览查看makefile[第一阶段的makefile] cat makefile
cat makefile
5.2 第二阶段Makefile
第二阶段Makefile(使用变量),示例如下
示例详细过程:
1.预览查看(第二阶段Makefile) cat makefile
cat makefile
2. 查看所有.c文件 ls *.c
ls *.c
3.多级目录
创建hello工程文件夹 mkdir xxx
mkdir hello
将 hello.c hello.h文件 拷贝到hello文件夹中 cp xxx.c xxx
cp hello.c hello.h hello
5.3 第三阶段Makefile
第三阶段Makefile自动推导,示例如下
5.4 第四阶段Makefile
第四阶段Makefile自动变量,示例如下
5.5 第五阶段Makefile
第五阶段Makefile 函数,示例如下
利用函数:
wildcard 函数查找文件下所有的文件名
patsubst 查找 替换