makefile 筆記

makefile 筆記

                                      

makefile 筆記:
 makefile 帶來的好處就是——“自動化編譯”,一旦寫好,只需要一個make 命令,整個工程完全自動編譯,極大的提高了軟件開發的效率。make 是一個命令工具,是一個解釋makefile 中指令的命令工具,一般來說,大多數的IDE 都有這個命令,比如:Delphi 的make,Visual C++的nmake,Linux 下GNU 的make。可見,makefile 都成爲了一種在工程方面的編譯方法。
 
程序的編譯和連接.
  在各種操作系統上執行的程序都是編譯之後的Binary文件,在不同的操作系統上要編譯成對應的可執行文件.但不同的編譯器對C/C++源碼都是先編譯 (compile)成中間代碼文件(object file),在UNIX中是.o文件.然後在把大量的.o文件合成可執行的文件,這個過程叫連接(linking).

 有時候由於要連接的目標文件很多,所以就將一些相近的目標文件"打個包",在windows下這種包叫"庫文件"(library file),也就是.lib文家,在UNIX下是Archive file,通常是.a文件.

 編譯時,編譯器只檢查程序語法,以及函數,變量等是否被聲明.在連接的時候,會在所有的object file中尋找函數的具體實現,如果找不到,那就會報連接錯誤.

makefile 的基本規則:
 target....:prerequisites....
  command
  .......
  .......
 
 prerequisites 中如果有一個以上的文件比target 文件要新的話,command 所定義的命令就會被執行。這就是Makefile 的規則。也就是Makefile中最核心的內容。
 
make 的工作步驟
 1, 首先會在當前的目錄下尋找"Makefile"或者"makefile"文件.(也可以通過,make -f FILENAME 的方式聲明使用哪個文件).
 2,默認情況下它會找文件中的第一個目標文件(target),並把這個文件作爲最終的目標文件(所以,一般都是將最終的目標放在最前面)。
 3、如果"target"文件不存在,或是"target"所依賴的後面的prerequisites文件的文件修改時間要比"target"這個文件新,那麼,他就會執行後面所定義的命令來生成"target"這個文件。
 4、make會接着檢查prerequisites中的文件是否也有依賴關係存在,如果有,就依次遞歸.(有點類似壓棧).
 5、當然,你的C 文件和H 文件是存在的啦,於是make 會依次執行command,(有點類似出棧)直到完成了第一個target依賴關係對應的命令。

 *也可以顯式的指明make的入口,這樣就不是將文件中第一個"target"做爲解析依賴關係,並遞歸壓棧的起點,而是將指明的入口處的"target"目標作爲開始.

makefile中變量的使用:
 定義變量:
  VariableName=........
 引用變量
  $(VariableName)

makefile的自動推導
 只要make 看到一個[.o]文件,它就會自動的把[.c]文件加在依賴關係,並且cc -c [.c] 也會被推導出來.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章