跳至內容

GNU make/概述

維基教科書,自由的教學讀本

手冊目錄

make概述[編輯]

make工具能自動判斷一個大程序的哪些部分需要再編譯,並且能用命令來執行再編譯操作。本文檔討論的GNU make原來是由司徒文與麥家府開發製作的,從3.76版開始由史密斯接管開發工作。

GNU make遵從IEEE 1003.2-1992標準(POSIX.2)第6.2條。

在本文例子中,筆者用的是C語言程序,這是因為C語言最為流行,但讀者也可以用make來完成其他編程語言的編譯工作,前提是這種語言的編譯器能在 shell下運行。當然,make的應用不局限於程序;如果遇到一些任務,這些任務的文件必須隨着其他文件或數據的變化而更新,那麼讀者就可以用make 來應對這些任務。

在使用make之前,請讀者先寫好Makefile文件,該文件須描述清楚程序文件之間的關係,還要給出更新每個文件的命令。通常,一個程序的可執行文件由OBJ文件來更新,而這些OBJ文件則由源代碼編譯產生。

只要有合適的Makefile文件,在修改了一些源代碼後,只要在Shell命令行下輸入:

make

就足以完成所有必要的再編譯。make程序通過Makefile的數據庫以及諸文件的最後修改時間來判斷哪些文件需要更新。對於每個需要更新的文件, make會用數據庫中記錄的命令來對其操作。

讀者可以給make加上命令行參數,以此告訴make哪些文件需要再編譯、怎樣再編譯。參見第九章如何運行make

如何使用本文檔[編輯]

如果讀者是個make新手,或者想閱讀大體介紹,那麼在閱讀每章時只需少量的看前幾節,後面幾節可以略過。每章的前幾節會有該章介紹以及該章的大體信息,而後幾節則會包括一些特殊的或技術性的信息。但第二章 make簡介是個例外,全章都是介紹性的內容。

如果讀者對其他make程序比較熟悉的話,請參閱第十二章 GNU make的特色功能,該章列出了GNU make的增強功能;另外請參閱第十三章 GNU make與標準make不兼容的部分,該章舉出GNU make在少數功能上遜色於其他make的例子。

如果需要閱讀摘要,請看第九章第七節 選項摘要附錄 A 快速參考以及第四章第八節所講的特殊目標

問題與漏洞[編輯]

如果讀者發現了GNU make的一些問題或者認為發現了漏洞,那麼請與開發者聯繫;我們不作任何承諾,但我們會盡力解決問題。

在提交漏洞報告之前,請核實漏洞的真實性。另外請認真反覆閱讀文檔,確定文檔介紹的應用方法在實際操作中有效,如果文檔對功能上的一些問題沒有闡述清楚,那麼也請提交報告,這些都是文檔的「漏洞」!

在提交漏洞報告或者自己解決漏洞之前,請將Makefile文件簡化至最小且能體現漏洞問題的程度。然後把Makefile文件連同出錯和警告信息一齊發給我們。請勿改動原信息,最好將其剪切複製到漏洞報告中。請確保用以生成最簡Makefile文件的命令中不使用非自由軟件或者不常用的程序(其實對於這種工具,讀者隨時都可以用簡單的幾句Shell命令來測試)。最後,請詳述Makefile本應有的預期結果,以便於我們判斷問題是否出在文檔上。

如果讀者發現了一個如假包換的錯誤,那麼可以通過以下兩種途徑提交報告:一、通過發送電子郵件到:

bug-make@gnu.org

與我們聯繫;
二、使用我們的在線項目管理來提交報告,網址是:

http://savannah.gnu.org/projects/make/


除了上述的信息以外,請將使用的make完整的版本號一併發給我們;讀者可以通過使用命令「make --version」來獲取版本信息。請確保報告中包含make所運行機器的硬件信息與操作系統信息;順便提一句,獲取這些信息的一種方法是使用命令 「make --help」,一切盡在命令的最後一行輸出中。