linux网络编程-----项目管理工具-----Makefile
? ? 1.?背景
????在linux下不管寫C還是C++,文件少的時候我們可以通過單個編譯成執行文件來完成,但文件多了,特別是一個文件因為調用了別一個文件的函數而需要包含編譯時,那時單獨編譯就顯得十分費勁了,這時候不得不得項目管理工具----->Makefile.
????Windows下由于有大量IDE(集成開發環境), 項目管理都可以通過IDE來自動完成,所以在開發上減去了項目管理上的麻煩.
?
? ? 2. 關于程序的編譯和鏈接
一般來說,無論是C還是C++,首先要把源文件編譯成中間代碼文件,在Windows下也就是 .obj 文件,UNIX下是 .o 文件,即 Object File,這個動作叫做編譯(compile),一般來說,每個源文件都應該對應于一個中間目標文件(O文件或是OBJ文件)。然后再把大量的Object File合成執行文件,這個動作叫作鏈接(link)。
編譯時,編譯器需要的是語法的正確,函數與變量的聲明的正確。對于后者,通常是你需要告訴編譯器頭文件的所在位置(頭文件中應該只是聲明,而定義應該放在C/C++文件中),只要所有的語法正確,編譯器就可以編譯出中間目標文件。
鏈接時,主要是鏈接函數和全局變量,所以,我們可以使用這些中間目標文件(O文件或是OBJ文件)來 鏈接我們的應用程序。鏈接器并不管函數所在的源文件,只管函數的中間目標文件(Object File),在大多數時候,由于源文件太多,編譯生成的中間目標文件太多,而在鏈接時需要明顯地指出中間目標文件名,這對于編譯很不方便,所以,我們要給 中間目標文件打個包,在Windows下這種包叫“庫文件”(Library File),也就是 .lib 文件,在UNIX下,是Archive File,也就是 .a 文件。
????下面我們來看看如何自己快速的寫出簡單易用的項目管理工具--->Makefile
????3. Makefile
????簡單的說,makefile定義了一系列的規則來指定,哪些文件需要先編譯,哪些文件需要后編譯,哪些文件需要重新編譯,甚至可以在makefile中執行shell腳本。makefile帶來的好處就是——“自動化編譯”,一旦寫好,只需要一個make命令,整個工程完全自動編譯,極大的提高了軟件開發的效率。
????Makefile規則:
????
????Makefile工作原理:
????????
????makefile中常用的變量與函數:[切記]
常用函數:
wildcard: 獲取當前目錄下指定類型文件
patsubst: 替換指定類型
常用變量
$@ 目標的完整名稱 ????????[常用]
$^ 所有的依賴文件,以空格分開,不包含重復的依賴文件 [常用]
$<?第一個依賴文件的名稱? ? ?[常用]
$* 不包含擴展名的目標文件名稱
$+ 所有的依賴文件,以空格分開,并以出現的先后為序,可能包含重復的依賴文件
????
????介紹了這么多,下面我們直接來看看代碼.
????1. 編譯當前目錄下所有的.c文件[也可以make 指定生成目標文件]
????2. 指定編譯目標文件
makefile依賴原理
????
轉載于:https://blog.51cto.com/lisea/1790902
總結
以上是生活随笔為你收集整理的linux网络编程-----项目管理工具-----Makefile的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C#如何反射出委托的签名,如何使用反射调
- 下一篇: php基础:查询程序运行时间并且把科学计