日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux网络编程-----项目管理工具-----Makefile

發布時間:2025/3/15 linux 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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 指定生成目標文件]

SRC?=?$(wildcard?./*.c) #獲取當前目錄下所有的.c文件 OBJ?=?$(patsubst?./%.c,?./%,?$(SRC)) #將所有.c文件去掉.c #變量賦值,編譯時指定的參數?-lpthread?指定線程所需庫,-std=gnu99?指定c99標準編譯  #-g?添加調試信息,供gdb調試使用?-Wall?更多提示 CC?=?gcc?-g?-Wall?-std=gnu99?-lpthreadall:$(OBJ)#生成所有目標 %:%.c$(CC)?$<?-o?$@#偽目錄,使執行make命令時不生成后面的目標,一般在清理命令中經常使用 .PHONY:clean #清理所有目標文件  '@' 不輸出至屏幕 clean:@rm?-f?$(OBJ)


????2. 指定編譯目標文件

src?=?$(wildcard?./*.c)??? #獲取當前目錄下所有的.c文件 obj?=?$(patsubst?./%.c,?./%.o,?$(src)) #將所有.c文件替換成.o #變量賦值,編譯時指定的參數?-lpthread?指定線程所需庫, #-std=gnu99?指定c99標準編譯 -g?添加調試信息,供gdb調試使用?-Wall?更多提示 CC?=?gcc?-g?-Wall?-std=gnu99?-lpthread#指定目標?成生server?client all:server?client#指定成生server目標所依賴項和命令 server:?warp.o?server.o$(CC)?$^?-o?$@#指定生成client目標所依賴項和命令 client:?warp.o?client.o$(CC)?$^?-o?$@%.o:%.c$(CC)?-c?$<?-o?$@#偽目錄,使執行make命令時不生成后面的目標,一般在清理命令中經常使用? .PHONY:clean clean:@rm?-f?$(obj)?#清理所有.o文件  '@' 不輸出至屏幕


makefile依賴原理

????

轉載于:https://blog.51cto.com/lisea/1790902

總結

以上是生活随笔為你收集整理的linux网络编程-----项目管理工具-----Makefile的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。