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

執行命令如下:

[email protected]:/home/wwwroot/test/c$ vim Makefile 
[email protected]:/home/wwwroot/test/c$ ls
cal.h  Makefile  max.c  min.c  res.c
[email protected]:/home/wwwroot/test/c$ make
gcc -c max.c
gcc -c min.c
gcc max.o min.o res.c -o res.out
[email protected]:/home/wwwroot/test/c$ ls
cal.h  Makefile  max.c  max.o  min.c  min.o  res.c  res.out
[email protected]:/home/wwwroot/test/c$ ./res.out 
the max value is 99
the min value is 88
[email protected]:/home/wwwroot/test/c$ 

最終make工具會根據Makefile的規則執行所有的編譯,並根據引用對未編譯的引用檔案進行編譯。

注:Linux若沒有自帶make工具,則需要進行安裝,使用make -v可以檢視版本

apt-get install make

make -v


.