Can you summarize the following document?
        
  目前雖有眾多依賴關係檢查工具,但是make是應用最廣泛的一個。這要歸功於它被包含在Unix系統中。斯圖亞特·費爾德曼在1977年在貝爾實驗室裡製作了這個軟體。2003年,斯圖亞特·費爾德曼因發明了這樣一個重要的工具而接受了美國計算機協會(ACM)頒發的軟體系統獎。  在make誕生之前,編譯工作主要依賴於作業系統裡面的類似於“make”、“install”功能的shell指令碼。它可以批量執行生成目標的命令,並且可以完成依賴關係的檢查。這是向現代編譯環境發展的重要一步。

  make程式已被使用者多次重/改寫,其中包括幾次用相同的檔案格式和演算法原理重新編寫,並且依照不同需要新增了一些不常見的改良。

  GNU make仿照make的標準功能(透過clean-room工程)重新改寫,並加入作者覺得值得加入的新功能,常和GNU編譯系統一起被使用,是大多數GNU Linux安裝的一部分。

  是從Adam de Boor的製作的版本上發展成的。它編譯目標的時候有平行計算的能力。它在FreeBSD,NetBSD和OpenBSD中不同程度的修改下存活了下來。

  廣泛應用於微軟的Windows,微軟的nmake是 Visual Studio 隨附的命令列工具,不要與來自AT&T和貝爾實驗室的Unix系統nmake混淆。

  就像其他和make有著悠久歷史的軟體一樣,make有著很多的擁護者和反對者。它的很多問題因現代大型的軟體專案的出現而暴露出來。但是很多人爭論說它在常見的情況下可以很好的工作,而且使用非常的簡單,功能強大,表達清楚。無論如何,make仍然被用來編譯很多完整的作業系統,而且現在替代品們在基本的操作上與它沒有太大差別。  隨著現代的整合開發環境(IDE)的誕生,特別是非Unix的平臺上,很多程式設計師不再手動管理依靠關係檢查,甚至不用去管哪些檔案是這個專案的一部分,而是把這些任務交給了他們的開發環境去做。類似的,很多現代的程式語言有自己特別的高效的依賴關係的設定方法。

  

  makefile的格式是:

  舉例來說明makefile的結構和make如何運作。  editor: main.o text.o main.o: main.c def.h text.o: text.c com.h install:editor  當我們輸入:  當editor這個target檔案不存在,或者main.o、text.o這兩個依賴檔案被修改,都會導致make呼叫其下的命令“gcc -o editor main.o text.o”;接下來,由於引用到main.o和text.o,make會檢查main.o的依賴main.c、def.h有無更新,如果有,則執行其下的命令“gcc -c main.c”;同樣的道理,也適用於text.o。 於是,可有幾種不同的輸出:  當我們輸入:  make會檢查install的依賴editor是否是最新,如果是,則執行其下的命令“mv editor /usr/local”。由於這個過程並沒有產生名為“install”的檔案,所以,install是一個假目標。

  “巨集”指的是用一個字串代替另一個字串的功能。在makefile中可以使用“=”號來定義巨集,使用“$(巨集名)”來使用巨集;還可以用“+=”追加巨集的內容。習慣上,巨集名使用大寫。承接上面的例子:  OBJECTS = main.o text.o INSTALL_PATH = /usr/local editor: $(OBJECTS) main.o: main.c text.o: text.c install:editor
在軟體開發中,make是一個工具程式(Utility software),經由讀取叫做“makefile”的檔案,自動化建構軟體。它是一種轉化檔案形式的工具,轉換的目標稱為“target”;與此同時,它也檢查檔案的依賴關係,如果需要的話,它會呼叫一些外部軟體來完成任務。它的依賴關係檢查系統非常簡單,主要根據依賴檔案的修改時間進行判斷。大多數情況下,它被用來編譯原始碼,生成結果程式碼,然後把結果程式碼連線起來生成可執行檔案或者庫檔案。它使用叫做“makefile”的檔案來確定一個target檔案的依賴關係,然後把生成這個target的相關命令傳給shell去執行。