吴忠躺衫网络科技有限公司

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

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

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

全面而詳細(xì)的Makefile使用手冊(cè)

Linux愛好者 ? 來源:Linux愛好者 ? 2024-01-24 12:35 ? 次閱讀

Makefile是一種編譯控制文件,廣泛用于項(xiàng)目的自動(dòng)化構(gòu)建。它定義了一系列的規(guī)則來指導(dǎo)構(gòu)建的過程。通過Makefile,開發(fā)者可以輕松管理大型項(xiàng)目的編譯鏈接、清理等任務(wù)。本文將從Makefile的基礎(chǔ)用法講起,逐步深入到更高級(jí)的應(yīng)用,為你呈現(xiàn)一個(gè)全面而詳細(xì)的Makefile使用手冊(cè)。

Makefile的基本結(jié)構(gòu)

一個(gè)最簡(jiǎn)單的Makefile包含規(guī)則,規(guī)則由目標(biāo)(target)、依賴(dependencies)和命令(commands)三部分組成:

target: dependencies
    commands

命令前的Tab鍵是必須的。下面是一個(gè)簡(jiǎn)單的示例:

hello: hello.c
    gcc -o hello hello.c

變量的使用

在Makefile中聲明變量可以使得我們的代碼更加簡(jiǎn)潔。

CC=gcc
CFLAGS=-std=c99
LDFLAGS=
OBJ=main.o utils.o

app: $(OBJ)
    $(CC) -o app $(OBJ) $(LDFLAGS)

main.o: main.c
    $(CC) $(CFLAGS) -c main.c

utils.o: utils.c utils.h
    $(CC) $(CFLAGS) -c utils.c

通用規(guī)則和模式匹配

模式規(guī)則可以減少我們重復(fù)相同命令的工作量。

%.o: %.c
    $(CC) $(CFLAGS) -c $<

$

自動(dòng)化變量

Makefile提供了一系列自動(dòng)化變量,它們?cè)谝?guī)則的命令中非常有用:

$@表示規(guī)則中的目標(biāo)文件名;

$^表示所有的依賴文件列表;

$

$?表示所有比目標(biāo)新的依賴文件列表。

函數(shù)的使用

Makefile中內(nèi)置了許多函數(shù),用以執(zhí)行字符串操作、文件操作等。

例如,獲取源文件列表:

SRC=$(wildcard *.c)
OBJ=$(patsubst %.c,%.o,$(SRC))

控制Make的行為

make -B強(qiáng)制重新編譯所有目標(biāo);

make -n顯示將要執(zhí)行的命令而不實(shí)際執(zhí)行;

make -f 指定使用其他名稱的Makefile文件;

make -j允許并行執(zhí)行(多核編譯)。

高級(jí)用法 - 條件判斷

Makefile也支持條件判斷,這在不同環(huán)境需要執(zhí)行不同命令時(shí)非常有用。

ifeq ($(OS),Windows_NT)
    RM=del /Q
else
    RM=rm -f
endif

clean:
    $(RM) *.o

使用變量和文件包含來組織Makefile

對(duì)于大型項(xiàng)目,組織多個(gè)Makefile是一種好方法。

# 在子Makefile中
include config.mk

自定義函數(shù)

通過定義可以重用的函數(shù),你可以使你的Makefile變得更加強(qiáng)大和靈活。

define run-cc
$(CC) $(CFLAGS) -o $@ $^
endef

app: $(OBJ)
    $(call run-cc)

處理多目標(biāo)

定義一個(gè)規(guī)則來批量處理多個(gè)文件。

FILES := file1 file2 file3

all: $(FILES)

$(FILES):
    touch $@

偽目標(biāo)的使用

偽目標(biāo)不代表實(shí)際的文件,它只是一個(gè)動(dòng)作的名稱。

.PHONY: clean

clean:
    rm -f *.o app

調(diào)試Makefile

你可以使用make --debug或添加注釋來幫助調(diào)試Makefile。

app: main.o utils.o
    # 這是一個(gè)鏈接的命令
    $(CC) -o app main.o utils.o

結(jié)語(yǔ)

Makefile是構(gòu)建自動(dòng)化的強(qiáng)大工具,既可以簡(jiǎn)化小型項(xiàng)目的構(gòu)建流程,也能夠靈活管理大型應(yīng)用程序的復(fù)雜構(gòu)建系統(tǒng)。通過本文的詳細(xì)論述和豐富示例,您應(yīng)該能夠基本掌握Makefile的各項(xiàng)技能,并在實(shí)際項(xiàng)目中加以應(yīng)用。

希望以上內(nèi)容對(duì)你深入理解和使用Makefile有所幫助。記住,“實(shí)踐出真知”——編寫你自己的Makefile并嘗試使用這些特性是最好的學(xué)習(xí)方式。

審核編輯:發(fā)貨

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

    關(guān)注

    30

    文章

    4825

    瀏覽量

    69043
  • 變量
    +關(guān)注

    關(guān)注

    0

    文章

    613

    瀏覽量

    28465
  • Makefile
    +關(guān)注

    關(guān)注

    1

    文章

    125

    瀏覽量

    19217

原文標(biāo)題:深入淺出 Makefile:從基礎(chǔ)到高級(jí)應(yīng)用

文章出處:【微信號(hào):LinuxHub,微信公眾號(hào):Linux愛好者】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    linux系統(tǒng)中Makefile的使用方法

    的基礎(chǔ)用法講起,逐步深入到更高級(jí)的應(yīng)用,為你呈現(xiàn)一個(gè)全面詳細(xì)Makefile使用手冊(cè)。 第一:Mak
    的頭像 發(fā)表于 05-11 08:49 ?743次閱讀

    freebsd使用手冊(cè)pdf

    freebsd使用手冊(cè)pdfThe FreeBSD Documentation Project FreeBSD 中文計(jì)劃,為PDF文檔格式。FREEBSD使用手冊(cè)分成了三個(gè)邏輯清晰的部分。第一部
    發(fā)表于 10-21 17:22

    EMC分析使用手冊(cè)

    EMC分析使用手冊(cè) [/hide]
    發(fā)表于 10-10 16:33

    USB設(shè)計(jì)及使用手冊(cè)

    USB設(shè)計(jì)及使用手冊(cè)  [hide]USB使用手冊(cè).rar[/hide][此貼子已經(jīng)被作者于2009-11-19 11:52:30編輯過]
    發(fā)表于 11-19 11:51

    DAvE_使用手冊(cè)_8 bit

    DAvE_使用手冊(cè)_8 bit
    發(fā)表于 08-20 09:13

    fpga使用手冊(cè)

    fpga使用手冊(cè),菜鳥必備get
    發(fā)表于 06-09 22:20

    CANopen使用手冊(cè)

    CANopen使用手冊(cè)
    發(fā)表于 09-20 16:01

    1602液晶使用手冊(cè)

    液晶1602的使用手冊(cè)附有應(yīng)用的例子
    發(fā)表于 10-30 17:31

    Cadence使用手冊(cè)經(jīng)典

    Cadence使用手冊(cè)經(jīng)典
    發(fā)表于 01-15 17:05

    加密芯片使用手冊(cè)

    加密芯片的安全性:1、芯片本身硬件的安全,采用U盾芯片2、算法安全,可以采用國(guó)家商用密碼算法,如SM1,SM7,SSF33等算法,是保密非公開算法。加密芯片使用手冊(cè)見附件 加密芯片使用手冊(cè).rar (79.94 KB )
    發(fā)表于 07-09 04:35

    Keil軟件使用手冊(cè)

    非常的KEIL軟件使用手冊(cè),內(nèi)部包含詳細(xì)的軟件的使用介紹,含示例詳解
    發(fā)表于 10-20 19:12

    STM32固件庫(kù)使用手冊(cè)

    最近領(lǐng)導(dǎo)讓我學(xué)學(xué)嵌入式開發(fā),在網(wǎng)上看了看老前輩們總結(jié)的嵌入式開發(fā)學(xué)習(xí)不歸路,還是決定按照步驟開始學(xué)習(xí)。首先是獲取到《STM32固件庫(kù)使用手冊(cè)》和《STM32F10x參考手冊(cè)》兩個(gè)開局手冊(cè),在網(wǎng)上找了
    發(fā)表于 08-04 06:40

    有沒有S32R274的SPE功能詳細(xì)使用手冊(cè)和例子可以參考呢

    請(qǐng)問,有沒有S32R274的SPE功能詳細(xì)使用手冊(cè)和例子可以參考呢,我看了reference manual,但是我還是不知道怎么在軟件中啟動(dòng)這個(gè)功能
    發(fā)表于 03-22 08:23

    JMeter 壓力測(cè)試使用手冊(cè)中文使用手冊(cè)

    JMeter 壓力測(cè)試使用手冊(cè)中文使用手冊(cè)
    發(fā)表于 09-05 09:51 ?11次下載
    JMeter 壓力測(cè)試<b class='flag-5'>使用手冊(cè)</b>中文<b class='flag-5'>使用手冊(cè)</b>

    JMeter壓力測(cè)試使用手冊(cè)的中文使用手冊(cè)

    JMeter壓力測(cè)試使用手冊(cè)的中文使用手冊(cè)
    發(fā)表于 09-08 09:57 ?7次下載
    JMeter壓力測(cè)試<b class='flag-5'>使用手冊(cè)</b>的中文<b class='flag-5'>使用手冊(cè)</b>
    网上百家乐有人赢过吗| 赤壁百家乐官网娱乐城| 德州扑克怎么发牌| 大家赢百家乐投注| 澳门百家乐官网网上赌城| 来安县| 大发888玩的人多吗| 百家乐技论坛| 太原百家乐官网的玩法技巧和规则| 广丰县| 大发888登录网页游戏| 百家乐大钱赢小钱| 澳门百家乐官网送彩金| 巢湖市| 大发888 打法888游戏| 澳门百家乐赌技巧| 百家乐注册赠分| 电子百家乐官网技巧| 菲律宾百家乐官网娱乐网| 六合彩开奖现场| 威尼斯人娱乐场官网326369| 百家乐一拖三| 百家乐官网麻将牌| 百家乐官网赌博赌博网站| 繁峙县| 菲律宾赌球| 大发888大发8668| 百家乐b28博你发v| 新2百家乐娱乐城| 三国百家乐官网娱乐城| 打百家乐官网庄闲的技巧| 打百家乐官网的介绍| 澳门凯旋门赌场| 大发888娱乐城m88| 澳门百家乐游戏官网| 澳门百家乐赌博技巧| 滨海湾百家乐娱乐城| 百家乐官网平注常赢玩法| 现场百家乐官网能赢吗| 百家乐官网开户送8彩金| 百家乐官网是咋玩法|