linux下的makefile程式設計

2021-08-19 15:10:56 字數 3619 閱讀 2573

程式1:mytool1.c

#include"mytool1.h"

#include"stdio.h"

void mytool1_print(char* 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)

程式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)

現在我們要執行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,系統預設生成mytool1.o檔案。

以下,是編譯步驟:

gcc -c mytool1.c

gcc -c mytool2.c

gcc -c main.c

下圖是編譯過程和結果。

1.分別編譯三個原始檔

這句命令是將三個.o檔案鏈結成可執行的main 程式。輸入./main執行程式。

通過上面發現,生成main檔案,我們需要編譯了三次,太耗費時間。使用makefile程式設計,可進行大量編譯。

這裡的mian是最終的可執行程式,名字隨便寫都行。我寫成了mian。

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

makefile內容的解釋:

每兩行為一句,前一行給出生成的檔名,和所需要的檔案,後一行給出方法。

mian:main.o mytool1.o mytool2.o

gcc -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 "進行大量編譯,執行的順序還是跟上面一樣,截圖如下:

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

objects=main.o mytool1.o mytool2.o

main:$(objects)

gcc -o mian $(objects)

main.o:main.c mytool1.h mytool2.h

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

mytool1.o:mytool1.c mytool1.h

gcc -c mytool1.c

mytool2.o:mytool2.c mytool2.h

gcc -c mytool2.c

clean:

rm *.h.gch

rm *.o

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

clean:

rm *.h.gch

rm  *.o

上面的意思是清楚生成的.o檔案和.h.gch檔案,這些檔案是中間檔案,可以刪除。

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

Linux下的MakeFile檔案

makefile是linux下的檔案管理工具,本質是檔案,載入執行需要make命令,make命令可以認為是執行shell指令碼檔案 我們建立乙個makefile檔案,注意,在linux中,m首字母大小寫不區分 呼叫vim makefile makefile內容是main的gcc的過程,要分步驟寫,和...

linux 下makefile的使用舉例

該程式在linux平台下用c語言實現 有兩個標頭檔案m1.h m2.h 對應的實現檔案m1.c m2.c 除錯檔案test.c 案例 如下 m1.h includevoid m1 print char str m2.h includevoid m2 print char str m1.c inclu...

linux下的Makefile詳解(5)

使用條件判斷 使用條件判斷,可以讓make根據執行時的不同情況選擇不同的執行分支。條件表示式可以是比較變數的值,或是比較變數和常量的值。一 示例 下面的例子,判斷 cc 變數是否 gcc 如果是的話,則使用gnu函式編譯目標。libs for gcc lgnu normal libs foo obj...