make命令是GNU的工程化编译工具,用于编译众多相互关联的源代码问价,以实现工程化的管理,提高开发效率。
make命令唯一读取的文件是Makefile,在较大的项目中,有些文件没有编译有些编译过,Makefile中指定一定的规则来对整个项目的所有文件新型编译,make命令读取文件,按照规则编译未编译的文件。
因此使用make命令可以避免使用gcc命令进行繁琐的执行编译。
以三个文件为例:
max.c:
int max(int a,int b) { if(a > b){ return a; }else{ return b; } }
min.c:
int min(int a,int b) { if(a < b){ return a; }else{ return b; } }
res.h:
int max(int a,int b); int min(int a,int b);
res.c:
#include <stdio.h> #include "cal.h" int main() { int a = 99; int b = 88; int maxVal = max(a,b); int minVal = min(a,b); printf("the max value is %d\nthe min value is %d\n",maxVal,minVal); return 0; }
在res.c中引用了两个max和min,分别计算两个整型的最大和最小值
如果不使用make命令,打印res.c的最终结果需要执行步骤:
先分别编译max.c和min.c为max.o和min.o文件;
再编译res.c生成可执行文件,然后运行可执行文件即可得到结果。
使用make命令编译过程:
1.创建并编辑Makefile文件
规则格式为:
<生成可执行二进制文件名>:<引入的.o文件1> <引入的.o文件2> <c源文件>
<gcc执行命令>
# this is a make file res.out:max.o min.o gcc max.o min.o res.c max.o:max.c gcc -c max.c min.o:min.c gcc -c min.c
执行命令如下:
ming@ming-TM1604:/home/wwwroot/test/c$ vim Makefile ming@ming-TM1604:/home/wwwroot/test/c$ ls cal.h Makefile max.c min.c res.c ming@ming-TM1604:/home/wwwroot/test/c$ make gcc -c max.c gcc -c min.c gcc max.o min.o res.c -o res.out ming@ming-TM1604:/home/wwwroot/test/c$ ls cal.h Makefile max.c max.o min.c min.o res.c res.out ming@ming-TM1604:/home/wwwroot/test/c$ ./res.out the max value is 99 the min value is 88 ming@ming-TM1604:/home/wwwroot/test/c$
最终make工具会根据Makefile的规则执行所有的编译,并根据引用对未编译的引用文件进行编译。
注:Linux若没有自带make工具,则需要进行安装,使用make -v可以查看版本
apt-get install make
make -v