博客專欄

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

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

        發(fā)布人:美男子玩編程 時(shí)間:2024-01-10 來(lái)源:工程師 發(fā)布文章

        剛接觸Linux,認(rèn)為直接make后就完成了編譯,沒(méi)想到編譯出的結(jié)果存在很大問(wèn)題,原來(lái)是make、make all和make clean的使用方法不對(duì)。

        1

        理論

        make、make all和make clean 是在使用 make 構(gòu)建系統(tǒng)時(shí)常見(jiàn)的命令。它們用于編譯和管理項(xiàng)目中的代碼。以下是每個(gè)命令的功能和區(qū)別:

        1、make

        • 功能

          make 命令默認(rèn)會(huì)查找當(dāng)前目錄下的 Makefile 或 makefile 文件,并執(zhí)行該文件中的第一個(gè)目標(biāo)(target)。

          如果第一個(gè)目標(biāo)依賴于其他目標(biāo),make 會(huì)先構(gòu)建這些依賴目標(biāo)。

        • 使用場(chǎng)景

          通常用于編譯和鏈接項(xiàng)目中的代碼。

          如果沒(méi)有指定目標(biāo),make 會(huì)嘗試編譯和鏈接整個(gè)項(xiàng)目。

        • 示例


          • 假設(shè) Makefile 的第一個(gè)目標(biāo)是 all,則運(yùn)行 make 會(huì)自動(dòng)執(zhí)行 make all。

        2、 make all

        • 功能

          make all 通常用于編譯和構(gòu)建整個(gè)項(xiàng)目。

          all 是一個(gè)常見(jiàn)的目標(biāo),一般在 Makefile 中明確定義,用于編譯項(xiàng)目中的所有必要文件。

        • 使用場(chǎng)景

          在想要編譯項(xiàng)目中的所有組件時(shí)使用。

          這通常是項(xiàng)目構(gòu)建的標(biāo)準(zhǔn)步驟。

        • 示例


          • Makefile 中可能包含以下內(nèi)容:




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

        運(yùn)行 make all 會(huì)依次構(gòu)建 prog1 和 prog2。

        3、make clean 

        • 功能

          make clean 用于清理項(xiàng)目,通常會(huì)刪除所有由之前的構(gòu)建過(guò)程生成的文件,如對(duì)象文件(.o)、編譯產(chǎn)物等。

        • 使用場(chǎng)景

          在需要清理構(gòu)建環(huán)境(例如,重新從頭開(kāi)始構(gòu)建項(xiàng)目)時(shí)使用。

        • 示例


          • Makefile 中可能包含以下內(nèi)容:



        clean:    rm -f *.o myProgram

        運(yùn)行 make clean 會(huì)刪除所有對(duì)象文件和程序 myProgram。

        所以:

        • make:默認(rèn)構(gòu)建項(xiàng)目,根據(jù) Makefile 中的第一個(gè)目標(biāo)執(zhí)行。

        • make all:明確構(gòu)建整個(gè)項(xiàng)目,通常是 Makefile 中定義的標(biāo)準(zhǔn)目標(biāo)。

        • make clean:清理項(xiàng)目,刪除之前構(gòu)建過(guò)程中生成的文件,準(zhǔn)備一個(gè)干凈的構(gòu)建環(huán)境。

        2

        實(shí)踐

        讓我們通過(guò)一個(gè)具體的例子來(lái)解釋 make、make all 和 make clean 的功能和區(qū)別。

        假設(shè)我們有一個(gè)簡(jiǎn)單的C語(yǔ)言項(xiàng)目,包含兩個(gè)源文件:main.c 和 helper.c,以及一個(gè)頭文件 helper.h。我們將創(chuàng)建一個(gè) Makefile 來(lái)編譯和管理這個(gè)項(xiàng)目。

        目錄結(jié)構(gòu)如下:






        /項(xiàng)目目錄|-- main.c|-- helper.c|-- helper.h|-- Makefile

        假設(shè) main.c 內(nèi)容如下:









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

        helper.c內(nèi)容如下:







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

        helper.h內(nèi)容如下: 


        void helperFunction();

        一個(gè)簡(jiǎn)單的 Makefile 可能如下所示:






















        CC=gccCFLAGS=-I. # 默認(rèn)目標(biāo)all: myProgram # 構(gòu)建最終程序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) # 清理構(gòu)建文件clean:    rm -f *.o myProgram

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

        • 在包含這些文件的目錄中打開(kāi)終端。

        • 運(yùn)行 make 或 make all。

          這將編譯代碼并生成 myProgram。

        • 運(yùn)行 ./myProgram 查看輸出。

        • 完成后,運(yùn)行 make clean 清理構(gòu)建文件。

        說(shuō)明:

        make 或 make all

        • 運(yùn)行 make 或 make all 將編譯 main.c 和 helper.c,然后鏈接這些對(duì)象文件以創(chuàng)建可執(zhí)行文件 myProgram。

        • 這是因?yàn)?all 是 Makefile 中定義的默認(rèn)目標(biāo),而 make 默認(rèn)執(zhí)行第一個(gè)目標(biāo)。

        make clean

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

        • 這用于清理項(xiàng)目,確保下次構(gòu)建時(shí)從干凈狀態(tài)開(kāi)始。

        *博客內(nèi)容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀點(diǎn),如有侵權(quán)請(qǐng)聯(lián)系工作人員刪除。



        關(guān)鍵詞: make

        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 泉州市| 永年县| 闽侯县| 安平县| 扎囊县| 山阴县| 建平县| 临高县| 色达县| 璧山县| 静宁县| 乌拉特后旗| 镇康县| 合江县| 乐至县| 新干县| 凤台县| 伊春市| 玉环县| 博客| 九龙县| 靖安县| 安阳县| 云梦县| 松桃| 舞钢市| 维西| 浦城县| 新宾| 鹿邑县| 吴桥县| 西平县| 渭源县| 曲阜市| 若羌县| 澎湖县| 库伦旗| 河曲县| 定兴县| 家居| 同心县|