1. 程式人生 > >C指針原理(14)-C指針基礎

C指針原理(14)-C指針基礎

clean 它的 ftw utility 軟件 動作 編寫 depend -o

make與makefile

make是一個工具程序(Utility?software),經由讀取叫做“makefile”的文件,自動化建構軟件。它是一種轉化文件形式的工具,轉換的目標稱為“target”;與此同時,它也檢查文件的依賴關系,如果需要的話,它會調用一些外部軟件來完成任務。它的依賴關系檢查系統非常簡單,主要根據依賴文件的修改時間進行判斷。大多數情況下,它被用來編譯源代碼,生成結果代碼,然後把結果代碼連接起來生成可執行文件或者庫文件。

makefile的格式是:

#用“井”號表明註釋。

target(要生成的文件):?dependencies(被依賴的文件)

????????#命令前面用的是“tab”而非空格。

????????#誤用空格是初學者容易犯的錯誤!

????????命令1

????????命令2

????????命令3

??????????.

??????????.

??????????.

????????命令n

#可以使用“\”表示續行。註意,“\”之後不能有空格!

target通常是我們要生成的文件的名字,擺放的順序不重要,但第一個target是默認的target。當make不帶參數時,自動執行第一個target。target也可以是要求make完成的動作,執行這種target後並不能得到和target同名的文件,因此,也稱為偽target(phony?target)。

dependencies是生成target所需的文件名列表。依賴可以為空,常用的“clean”target就常常沒有依賴,只有命令。

命令可以是任何一個shell能運行的命令。

2、makefile示例

我們先以“hello,world”為例,說明makefile的使用。在linux的shell環境中用vim編譯hello.c

myhaspl@myhaspl:~/2$?vim?hello.c

在打開的VIM窗口中進行編輯。

#include?<stdio.h>

int?main(void)

{

printf?("hello,world!");

return?0;

}

然後編譯,這次一步到位編譯完成


myhaspl@myhaspl:~/2$?gcc?hello.c?-o?hello

myhaspl@myhaspl:~/2$?./hello???????????????????????????????????????????????????????????????????????

hello,world!

接著編寫makefile文件,實現hello程序的編譯自動化。Makefile文件內容如下:

hello:hello.c

????????gcc?hello.c?-o?hello

clean:

????????rm?hello

上面代碼中,clean後沒有被依賴的文件,因此,不會被make自動執行,這種情況可理解為一種命令。

make依賴關系檢查系統非常簡單,主要根據依賴文件的修改時間進行判斷,如果時間比編譯時的時間要新,才重新編譯,否則不會重新,如果需要調用make強行重新編譯,就需要將編譯後的目標文件刪除。因此這裏定義了clean,當想重新調用make編譯hello.c時,可以主動調用make?clean來清除編譯。

我們編譯,運行後,再使用clean選項清除目標文件,重新編譯一次。


myhaspl@myhaspl:~/2$?make

gcc?hello.c?-o?hello

myhaspl@myhaspl:~/2$?./hello

hello,world!

myhaspl@myhaspl:~/2$?make?clean

rm?hello

myhaspl@myhaspl:~/2$?make

gcc?hello.c?-o?hello

myhaspl@myhaspl:~/2$

C指針原理(14)-C指針基礎