0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

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

jf_Vqngj70R ? 來(lái)源:美男子玩編程 ? 2024-01-05 12:32 ? 次閱讀

剛接觸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 prog2
prog1: ...
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)境(例如,重新從頭開始構(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!
");
    helperFunction();
    return 0;
}

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

#include
#include "helper.h"


void helperFunction() {
    printf("Helper function called.
");
}

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

void helperFunction();

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

CC=gcc
CFLAGS=-I.
 
# 默認(rèn)目標(biāo)
all: myProgram
 
# 構(gòu)建最終程序
myProgram: main.o helper.o
    $(CC) -o myProgram main.o helper.o
 
# 編譯 main.c
main.o: main.c
    $(CC) -c main.c $(CFLAGS)
 
# 編譯 helper.c
helper.o: helper.c
    $(CC) -c helper.c $(CFLAGS)
 
# 清理構(gòu)建文件
clean:
    rm -f *.o myProgram

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

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

運(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)開始。

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11304

    瀏覽量

    209521
  • 命令
    +關(guān)注

    關(guān)注

    5

    文章

    684

    瀏覽量

    22027
  • 編譯
    +關(guān)注

    關(guān)注

    0

    文章

    657

    瀏覽量

    32872
  • make
    +關(guān)注

    關(guān)注

    0

    文章

    16

    瀏覽量

    12524

原文標(biāo)題:make、make all和make clean的使用方法

文章出處:【微信號(hào):美男子玩編程,微信公眾號(hào):美男子玩編程】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Hightec編譯出錯(cuò)make: *** No rule to make target 'all'. Stop.

    make: *** No rule to make target 'all'.Stop.
    發(fā)表于 12-17 11:18

    Make Precise Base-Station Powe

    Make Precise Base-Station PowerMeasurements:Make Precise Base-StationPowerMeasurements:A highly
    發(fā)表于 09-23 23:03 ?12次下載

    GNU make中文手冊(cè) (pdf版下載)

    GNU make中文手冊(cè) (pdf版下載):GNU make中文手冊(cè).1ver - 3.81第一章:概述.71.1 Make之前基本知識(shí):.71.1.1 概述71.1.2 準(zhǔn)備知識(shí)81.2 GNU
    發(fā)表于 10-09 17:09 ?0次下載

    gnu make使用手冊(cè)

    gnu make使用手冊(cè)本文瑾獻(xiàn)給所有熱愛(ài)Linux的程序員!本文檔版權(quán)所有,禁止用于任何商業(yè)行為。本文比較完整的講述GNU make工具,涵蓋GNU make的用法、語(yǔ)法。同時(shí)重點(diǎn)討論如何為一
    發(fā)表于 10-09 17:10 ?0次下載

    gun make教程

    gun make教程.rar 關(guān)于本書 本文瑾獻(xiàn)給所有熱愛(ài)Linux的程序員!本中文文檔版權(quán)所有。 本文比較完整的講述GNU make工具,涵蓋GNU make的用法、語(yǔ)法。同時(shí)
    發(fā)表于 03-10 13:50 ?0次下載

    Integrated Solutions Make Anal

    Integrated Solutions Make Analog Filter Design Easy Abstract: This application note explains
    發(fā)表于 11-08 17:40 ?1047次閱讀
    Integrated Solutions <b class='flag-5'>Make</b> Anal

    C2make手冊(cè)

    這份手冊(cè)描述了由秦作坊的默之實(shí)現(xiàn)的Chinc2make(2.10.06-8版本,2010年8月1日)。當(dāng)您進(jìn)行C、C++、Gtk+、Gtkmm、Motif、wxWidget和openGL程序設(shè)計(jì)時(shí),c2make工具可以根據(jù)源代碼文件直接生成Makefile文件
    發(fā)表于 04-18 20:29 ?6次下載

    gnu make 中文手冊(cè)

    介紹怎樣寫Makefile,并能夠使用GNU 的make來(lái)管理自己的工程
    發(fā)表于 11-10 16:49 ?2次下載

    Make a difference with DragonBoa

    Make a difference with DragonBoard 410c-如何使用串口轉(zhuǎn)USB打印功能講解,我還上傳了很多相關(guān)資料,感興趣的小伙伴們可以去我上傳的資料頁(yè)面里看看。
    發(fā)表于 06-30 15:10 ?2次下載

    GNU_make中文手冊(cè)

    電子專業(yè)單片機(jī)相關(guān)知識(shí)學(xué)習(xí)教材資料——GNU-Make
    發(fā)表于 08-23 16:23 ?0次下載

    GNU-make中文手冊(cè)

    電子專業(yè)單片機(jī)相關(guān)知識(shí)學(xué)習(xí)教材資料——GNU-Make
    發(fā)表于 08-23 16:23 ?0次下載

    GNU_make中文手冊(cè)

    電子專業(yè)單片機(jī)相關(guān)知識(shí)學(xué)習(xí)教材資料——GNU-Make
    發(fā)表于 08-23 16:23 ?0次下載

    GNU_Make_中文手冊(cè)下載

    GNU_Make_中文手冊(cè)下載
    發(fā)表于 10-30 09:20 ?12次下載
    GNU_<b class='flag-5'>Make</b>_中文手冊(cè)下載

    Openwrt通用固件 make menuconfig配置教程

    Openwrt通用固件 make menuconfig配置教程
    發(fā)表于 09-07 12:01 ?4次下載

    GNU make中文手冊(cè)

    電子發(fā)燒友網(wǎng)站提供《GNU make中文手冊(cè).pdf》資料免費(fèi)下載
    發(fā)表于 06-05 13:22 ?0次下載