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

歡迎訪問 生活随笔!

生活随笔

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

linux

linux下的makefile编程

發(fā)布時間:2025/3/20 linux 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux下的makefile编程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

linux下編程使用makefile文件

?在談makefile之前,先來看看下面幾個小程序:

程序1:mytool1.c

#include"mytool1.h" #include"stdio.h" void mytool1_print(char* print_str) {printf("This is mytool1 print %s\n", print_str); } 程序2:mytool1.h #ifndef _MYTOOL_1_H #define _MYTOOL_1_H void mytool1_print(char*); #endif

程序3;mytool2.c

#include"mytool2.h" #include"stdio.h" void mytool2_print(char* print_str) {printf("This is mytool2 print %s\n", print_str); } 程序4:mytool2.h #ifndef _MYTOOL_2_H #define _MYTOOL_2_H void mytool2_print(char* ); #endif

程序5:main.c

#include"mytool1.h" #include"mytool2.h" int main(void) {mytool1_print("hello 1");mytool2_print("hello 2");return 0; }

現在我們要運行main.c來打印輸出
This is mytool1 print hello 1
This is mytool1 print hello 2

如圖所示,所有源文件:

我們先按照常用的編譯做法,對五個文件分別編譯。
linux下的c/c++編譯器是 gcc 和 g++, 不過,gcc使用的人比較多,這兩個都能便于c和c++文件,下面以gcc編譯為樣例。??


gcc 的編譯格式大致為:gcc -c 源文件? -o 目標文件

方式不唯一,其中“ c ”的含義是英文單詞 compile 編譯的縮寫,” o “的含義是英文單詞out輸出的縮寫, 如果沒有指定生成目標文件,編譯器默認生成跟源文件同名的編譯文件。

編譯上面的例子:
gcc -c mytool1.c -o mytool.o,這個命令是編譯mytool1.c文件生成目標mytool1.o文件,這里生成文件mytool1其實可以寫成任意的符號或者名稱,如果寫成gcc -c mytool1.c,系統(tǒng)默認生成mytool1.o文件。

以下,是編譯步驟:

gcc -c mytool1.c gcc -c mytool2.c gcc -c main.c

下圖是編譯過程和結果。

1.分別編譯三個源文件


?

2.gcc main.o ?-o ?main ?mytool1.o mytool2.o

這句命令是將三個.o文件鏈接成可執(zhí)行的main 程序。輸入./main執(zhí)行程序。

?

通過上面發(fā)現,生成main文件,我們需要編譯了三次,太耗費時間。使用makefile編程,可進行大量編譯。

1、在上面程序的同一路徑建立一個makefile文件,不加后綴名,makefile內容如下所示。

這里的mian是最終的可執(zhí)行程序,名字隨便寫都行。我寫成了mian。

特別注意:gcc前面都是帶有一個tab鍵的空格,這個不能少,少了就出錯。盡量不要復制這幾行代碼,我的代碼可能空格數不對,自己手到進去一個table鍵就行了。

mian:main.o mytool1.o mytool2.ogcc -o mian main.o mytool1.o mytool2.omain.o:main.c mytool1.h mytool2.hgcc -c main.cmytool1.o:mytoo1.c mytool1.hgcc -c mytool1.cmytool2.o:mytool2.c mytool2.hgcc -c mytool2.c ?

makefile內容的解釋:

每兩行為一句,前一行給出生成的文件名,和所需要的文件,后一行給出方法。

mian:main.o mytool1.o mytool2.ogcc -o mian main.o mytool1.o mytool2.o ?

上面的代碼解釋為:

第一行解釋:main 程序的生成是依賴main.o mytool1.o mytool2.o文件的。這行給出的是依賴關系。

第二行解釋:這行給出了生成main程序的方法,方法是通過gcc -c main.o mytool1.o mytool2.o方法來生成的,
下面幾行就不講了,原理都是一樣,先給出文件的依賴關系,再給出方法。

編寫好makefile, 用輸入命令" ?make "進行大量編譯,執(zhí)行的順序還是跟上面一樣,截圖如下:


?

2.上面的makefile其實還是不夠簡練,,我們發(fā)現里面反復出現了main.o mytool.o mytool2.o, 于是我們可以找一個變量名來代替它,下面代替名是objects;

下面是精簡后的makefile:內容如下:

objects=main.o mytool1.o mytool2.o main:$(objects)gcc -o mian $(objects) main.o:main.c mytool1.h mytool2.hgcc -c main.c mytool1.h mytool2.h mytool1.o:mytool1.c mytool1.hgcc -c mytool1.c mytool2.o:mytool2.c mytool2.hgcc -c mytool2.c clean: rm *.h.gchrm *.o

每個gcc都必須一個tab鍵空格。還要注意圖中的mian和$之間是有空格的,不加空格,編譯會出錯。
clean:

? ? rm *.h.gch
????rm ?*.o
上面的意思是清楚生成的.o文件和.h.gch文件,這些文件是中間文件,可以刪除。

輸入make clean命令就可以清除全部.o文件。

?

總結

以上是生活随笔為你收集整理的linux下的makefile编程的全部內容,希望文章能夠幫你解決所遇到的問題。

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