作用:make是linux中的工程自动编译管理器,由若干个程序文件组成,包括有且仅有一个的主函数,还有被主函数调用的其他函数,全部放到一起,make能够根据文件时间戳自动识别哪些文件被修改过,然后在make命令时,只编译修改过的,未修改的不编译,能够提高程序编译、存储效率;
工程文件名默认是makefile,大小写均可,但是不能同时存在,否则,系统会直接选择小写开头的makefile,当你把编译规则放到以大写开头的Makefile时,可能造成程序编译错误;
makefile里面是存放编译规则的,主要包括三个内容:
①建立目标体(target),以及目标文件、可执行文件,文件之间都以空格相隔开 //目标体是终极文件,后面所有的文件和命令都是为其服务的
②创建目标体所依赖的文件
③创建目标体运行的命令 //这一行必须以制表键(tab)开头
以加减乘除的例子详述makefile的使用用法↓
vim makefile //进入vim编辑器
main:main.o add.o sub.o mul.o div.o
gcc -o main main.o add.o sub.o mul.o div.o
main.o:main.c
gcc -c main.c -o main.o -I./
add.o:add.c
gcc -c add.c -o add.o
sub.o:sub.c
gcc -c sub.c -o sub.o
mul.o:mul.c
gcc -c mul.c -o mul.o
div.o:div.c
gcc -c div.c -o div.o
clean: //以下两行是尾目标命令,不需要依赖文件,作用是上述任务完成后,执行第14行命令;
rm -f main.o add.o sub.o mul.o div.o //clean也可以有依赖文件,例如依赖文件是install,第14行是复制或者移动文件命令,则13与14行实现了程序安装功能;
$:make //使用make命令进行编译
... //显示上述已经定义的编译规则与文件依附关系
... //提示已经完成make,生成了math可执行文件
./main //即可执行程序,输入输出结果
自定义变量
上述程序中存在多处main.o add.o sub.o mul.o div.o,可以采用以下命令将该部分内容利用一个自定义变量代替,减少重复输入量:
obj:main.o add.o sub.o mul.o div.o
main:$(obj) //即取该自定义变量的定义的内容
gcc $(obj) -o main
client模板,提供的模板包含以下文件:
[check_putin] //模板主函数依附的文件之一,删除,我们需要新建自己的依附文件
[include] //头文件,需要进入修改自己的函数声明(extern),.h类文件
[main] //存放main.c以及对应的Makefile,需要进入修改main.c为自己的主函数,Makefile不动
[pack_message] //模板提供的主函数依附文件之一,删除,需要新建自己的依附文件
[scripts] //脚本存放了核心的makefile,需要进入修改自己的target、依赖文件、生成可执行文件的名称
[client] //模板生成的可执行程序文件,删除
[Makefile] //根目录下面的,不动,是用来将scripts中的makefile与依附文件(main.c add.c...)中的makefile联系起来,并输出make done的结束提示
模板client具体使用用法(以四则运算为例)
cd scripts →修改target以及依附文件#libs,这一行是线程,暂时不需要,用#使其编程解释;然后将target更改成我们想要的可执行文件,例如math;
#并将modules后的文件更改成我们自己的依附文件:main add sub mul div
cd include →修改头文件#删除7行以下,声明四则运算的函数(etern int add(int a,int b)...)
cd main →修改主函数#cd src,rm main.o;vim mian.c,删除9行以下,开始写主程序,注意加上#include<stdio.h>
cd client →创建四个目录,分别对应四则运算#mkdir -p add/src 采用-p连续纵向创建目录;同理创建另外3个;并将main目录下面的Makefile复制到刚新建的四则运算目录下面,命令是cp main/Makefile ./add/
cd ./add/src/ →创建add.c,进行函数定义(不加分号)
cd client →make命令,输出target math可执行程序,并./math,验证程序结果;