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