Linux下使用make命令编译c源文件

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


猜你喜欢

转载自blog.csdn.net/weixin_36185028/article/details/80320897