1. 程式人生 > >Linux操作——簡單Makefile檔案的編寫

Linux操作——簡單Makefile檔案的編寫

I、在eg目錄下新建“hello.c”檔案

//hello.c檔案
#include <stdio.h>

int main()
{		
	printf ("Hello World!\n");
	
	return 0;
}	

II、在hello目錄下新建“Makefile”檔案

#檔名:makefile 或者 Makefile,再無其它命名。
hello:hello.c
	gcc hello.c -o hello
	
clean:
	rm -rf hello	

hello:需要生成的目標檔案
main.c:生成目標檔案所需要的依賴檔案
(Tab)gcc main.c -o hello :生成目標檔案的編譯規則命令列。
此命令列前必須加一個鍵

每個Makefile中都應該寫一個清空目標檔案(.o和執行檔案)的規則,
這既便於重編譯,也很利於保持檔案的清潔。

PHONY: clean 表示clean是一個“偽目標”
而在rm命令前面加了一個小減號的意思就是,也許某些檔案出現問題,但不要管,繼續做後面的事。

一般情況下,一個偽目標不作為另一個目標的依賴。所謂偽目標就是這樣一個目標,它不代表一個真正的檔名,在執行make時可以指定這個目標來執行其所在規則定義的命令,有時我們將一個偽目標稱為標籤。當一個偽目標沒有作為任何目標的依賴時,我們只能通過make命令來明確指定它為make的終極目標,來執行它所在規則所定義的命令。

以clean舉例,如果make完成後,自己另外定義一個名叫clean的檔案,
再執行make clean時,將不會執行rm命令。

使用PHONY: clean的原因:
a、避免在makefile中定義的只執行命令的目標和工作目錄下的實際檔案出現名字衝突,
b、提升執行makefile時的效率。

III、測試結果

[email protected]:/eg# ls
hello.c  Makefile
[email protected]:/eg# make
gcc hello.c -o hello
[email protected]:/eg# ls
hello  hello.c  Makefile
[email protected]:/eg# ./hello
Hello World!
[email protected]
:/eg# make clean rm -rf hello [email protected]:/eg# ls hello.c Makefile

執行:執行make命令,執行命令的時候可以加“-n”,代表不真正執行命令,只是預覽要執行的命令
clean:清除相關檔案
執行規則:
a、如果目標檔案的時間早於依賴檔案,則重新生成目標檔案
b、如果依賴檔案不存在,則會去找相應的規則生成依賴檔案