第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

全部開發(fā)者教程

make 工具 makefile

編譯型語言在每次執(zhí)行之前都要進行編譯。這在有人眼里是優(yōu)勢,因此編譯過程中可以進行一些語法等信息的檢查,避免一些初級的錯誤。同時編譯出來的代碼可以有更好的運行速度。但是在有些人眼里這就是災難。其實不是有時候不是因為別的什么原因,而是因為你輸入的編譯命令可能長的的需要好幾行才能輸入完。中間要是修改起來簡直就是不可能。

所以,我們有了一個新的工具 make。

1. make 工具

make 工具是用來構建 C 程序而發(fā)明的。特別是當需要依賴大量的庫文件(尤其是非標準庫文件),和需要設置一些特殊的系統(tǒng)變量環(huán)境等內容的時候。通常情況下, make 工具都會用在比較大的項目中。但是如果在規(guī)模不大的程序中使用會更簡單,同時會讓你的程序構建變得也更輕松。

要使用 make 工具就需要寫一個 makefile,通常情況下這個文件名就是叫 makefile。當然你可以用別的名字替代。不過這個時候你就要在執(zhí)行 make 命令的時候指定你所要執(zhí)行的 makefile 文件名。如果寫成 makefile 這個名字, make 程序會直接在當前所在的文件夾中尋找這個文件,就不用指定文件名字了。所以,建議大家就用 makefile 這個英文單詞的名字。

make 工具其實不僅僅可以應用于 C 語言。它目前也不僅僅只是可以用在 linux 中。它也是可以跨平臺的應用。

那么這個 makefile 文件的結構是什么?

其實比較簡單。

目標:  依賴1, 依賴2, ……
        編譯命令

2. 使用實例

這里我們有一個程序需要構建,而這個程序構建過程中,會依賴另外一個程序。這個時候我們就可以方便的通過 make 工具了。

文件名:test.c

#include <stdio.h>
int add(int d, int e);

int main()
{
     int a = 2, b = 3, c;
     c = add(a, b);
     printf("a add b = %d\n", c);
     return 0;
}

上面是我們的主程序,通過調用外部的程序 add 來實現(xiàn)加法運算。這里需要注意的是我們在程序的開始 int add(int d, int e); 這一行語句是函數(shù)的原型聲明,因為函數(shù)本身是寫在另外一個函數(shù)里的。這個函數(shù)本身是不不知道有這個函數(shù)存在的。要想使用 add 這個函數(shù),就要先告知這個 main 函數(shù)。

文件名:add.c

int add(int x, int y)
{
    return x + y;
}

上面是我們實現(xiàn)加法運算的子程序。也就是被調用的那個程序。存在于另外一個程序文件中。就是一個簡單的求和返回值。

我們首先展示,直接使用命令行是應該如何編譯這兩個文件的。

gcc test.c add.c -o test

這個看著是不長,但是我遇到過數(shù)十個依賴庫的情況。你們自己可以自行想象一下24寸顯示器屏幕全屏shell窗口一行寫不完的景象。

所以這個時候 make 工具就要出場了。

先寫一個 makefile 文件,名字就叫 makefile。

test: test.c add.c
		gcc test.c add.c -o test

運行結果:

utopia@DESKTOP:~$ make
gcc test.c add.c -o test
utopia@DESKTOP:~$ make
make: 'test' is up to date.

連續(xù)執(zhí)行兩次 make 也會有新的發(fā)現(xiàn),當再次執(zhí)行 make 時,make 文件會檢查原始代碼是不是有新的變化。

如果缺失依賴文件會怎樣?

如果是直接執(zhí)行編譯命令會有如下提示。

gcc test.c add.c -o test
gcc: error: add.c: No such file or directory
makefile:2: recipe for target 'testbuild' failed
make: *** [testbuild] Error 1

而采用 make 文件會有下面的提示。

utopia@DESKTOP:~$ make
make: *** No rule to make target 'add.c', needed by 'test'.  Stop.

這兩者有最大的區(qū)別就是 make 文件在進行大規(guī)模編譯前就會根據(jù)你所提供的依賴進行文件檢車。如果缺少了依賴的文件就會直接停止下面的編譯,節(jié)省了大量的時間。不會出現(xiàn)編譯到一半找不到文件的尷尬。

3. 小結

make 作為提高構建程序效率的工具,廣泛應用在程序的編譯構建中。大家如果用一些提供源碼編譯的工具話一定會使用過 make 工具。

make 工具解決了構建過程依賴的短缺,以及構建命令不容易維護的難題。使得編譯程序可以變得不再那么痛苦。畢竟寫一次 makefile 文件,每次都要重新輸入超長的編譯命令來說還是很方便的。更不要說還有可能設置更為負載的系統(tǒng)變量。