博客專欄

        EEPW首頁 > 博客 > make、make all和make clean的使用方法

        make、make all和make clean的使用方法

        發布人:美男子玩編程 時間:2024-01-10 來源:工程師 發布文章

        剛接觸Linux,認為直接make后就完成了編譯,沒想到編譯出的結果存在很大問題,原來是make、make all和make clean的使用方法不對。

        1

        理論

        make、make all和make clean 是在使用 make 構建系統時常見的命令。它們用于編譯和管理項目中的代碼。以下是每個命令的功能和區別:

        1、make

        • 功能

          make 命令默認會查找當前目錄下的 Makefile 或 makefile 文件,并執行該文件中的第一個目標(target)。

          如果第一個目標依賴于其他目標,make 會先構建這些依賴目標。

        • 使用場景

          通常用于編譯和鏈接項目中的代碼。

          如果沒有指定目標,make 會嘗試編譯和鏈接整個項目。

        • 示例


          • 假設 Makefile 的第一個目標是 all,則運行 make 會自動執行 make all。

        2、 make all

        • 功能

          make all 通常用于編譯和構建整個項目。

          all 是一個常見的目標,一般在 Makefile 中明確定義,用于編譯項目中的所有必要文件。

        • 使用場景

          在想要編譯項目中的所有組件時使用。

          這通常是項目構建的標準步驟。

        • 示例


          • Makefile 中可能包含以下內容:




        all: prog1 prog2prog1: ...prog2: ...

        運行 make all 會依次構建 prog1 和 prog2。

        3、make clean 

        • 功能

          make clean 用于清理項目,通常會刪除所有由之前的構建過程生成的文件,如對象文件(.o)、編譯產物等。

        • 使用場景

          在需要清理構建環境(例如,重新從頭開始構建項目)時使用。

        • 示例


          • Makefile 中可能包含以下內容:



        clean:    rm -f *.o myProgram

        運行 make clean 會刪除所有對象文件和程序 myProgram。

        所以:

        • make:默認構建項目,根據 Makefile 中的第一個目標執行。

        • make all:明確構建整個項目,通常是 Makefile 中定義的標準目標。

        • make clean:清理項目,刪除之前構建過程中生成的文件,準備一個干凈的構建環境。

        2

        實踐

        讓我們通過一個具體的例子來解釋 make、make all 和 make clean 的功能和區別。

        假設我們有一個簡單的C語言項目,包含兩個源文件:main.c 和 helper.c,以及一個頭文件 helper.h。我們將創建一個 Makefile 來編譯和管理這個項目。

        目錄結構如下:






        /項目目錄|-- main.c|-- helper.c|-- helper.h|-- Makefile

        假設 main.c 內容如下:









        #include#include "helper.h"int main() {    printf("Hello, World!n");    helperFunction();    return 0;}

        helper.c內容如下:







        #include#include "helper.h"void helperFunction() {    printf("Helper function called.n");}

        helper.h內容如下: 


        void helperFunction();

        一個簡單的 Makefile 可能如下所示:






















        CC=gccCFLAGS=-I. # 默認目標all: myProgram # 構建最終程序myProgram: main.o helper.o    $(CC) -o myProgram main.o helper.o # 編譯 main.cmain.o: main.c    $(CC) -c main.c $(CFLAGS) # 編譯 helper.chelper.o: helper.c    $(CC) -c helper.c $(CFLAGS) # 清理構建文件clean:    rm -f *.o myProgram

        所以如何使用make、make all和make clean呢?步驟如下:

        • 在包含這些文件的目錄中打開終端。

        • 運行 make 或 make all。

          這將編譯代碼并生成 myProgram。

        • 運行 ./myProgram 查看輸出。

        • 完成后,運行 make clean 清理構建文件。

        說明:

        make 或 make all

        • 運行 make 或 make all 將編譯 main.c 和 helper.c,然后鏈接這些對象文件以創建可執行文件 myProgram。

        • 這是因為 all 是 Makefile 中定義的默認目標,而 make 默認執行第一個目標。

        make clean

        • 運行 make clean 將刪除所有編譯生成的對象文件(.o 文件)和可執行文件 myProgram。

        • 這用于清理項目,確保下次構建時從干凈狀態開始。

        *博客內容為網友個人發布,僅代表博主個人觀點,如有侵權請聯系工作人員刪除。



        關鍵詞: make

        技術專區

        關閉
        主站蜘蛛池模板: 陆河县| 定安县| 隆林| 双城市| 卓资县| 沧源| 东明县| 施秉县| 杭锦旗| 敦化市| 公安县| 株洲市| 堆龙德庆县| 土默特右旗| 庐江县| 谷城县| 浙江省| 麻江县| 通城县| 南阳市| 庐江县| 城步| 乐昌市| 溆浦县| 井陉县| 泽州县| 通州市| 策勒县| 聊城市| 葵青区| 易门县| 正镶白旗| 抚宁县| 清丰县| 绥棱县| 衡东县| 会东县| 哈密市| 搜索| 广宗县| 河津市|