RM新时代网站-首页

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

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

全面而詳細的Makefile使用手冊

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

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

Makefile的基本結構

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

target: dependencies
    commands

命令前的Tab鍵是必須的。下面是一個簡單的示例:

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

變量的使用

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

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ī)則可以減少我們重復相同命令的工作量。

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

$

自動化變量

Makefile提供了一系列自動化變量,它們在規(guī)則的命令中非常有用:

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

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

$

$?表示所有比目標新的依賴文件列表。

函數的使用

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

例如,獲取源文件列表:

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

控制Make的行為

make -B強制重新編譯所有目標;

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

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

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

高級用法 - 條件判斷

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

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

clean:
    $(RM) *.o

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

對于大型項目,組織多個Makefile是一種好方法。

# 在子Makefile中
include config.mk

自定義函數

通過定義可以重用的函數,你可以使你的Makefile變得更加強大和靈活。

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

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

處理多目標

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

FILES := file1 file2 file3

all: $(FILES)

$(FILES):
    touch $@

偽目標的使用

偽目標不代表實際的文件,它只是一個動作的名稱。

.PHONY: clean

clean:
    rm -f *.o app

調試Makefile

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

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

結語

Makefile是構建自動化的強大工具,既可以簡化小型項目的構建流程,也能夠靈活管理大型應用程序的復雜構建系統(tǒng)。通過本文的詳細論述和豐富示例,您應該能夠基本掌握Makefile的各項技能,并在實際項目中加以應用。

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

審核編輯:發(fā)貨

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯系本站處理。 舉報投訴
  • 代碼
    +關注

    關注

    30

    文章

    4779

    瀏覽量

    68519
  • 變量
    +關注

    關注

    0

    文章

    613

    瀏覽量

    28360
  • Makefile
    +關注

    關注

    1

    文章

    125

    瀏覽量

    19181

原文標題:深入淺出 Makefile:從基礎到高級應用

文章出處:【微信號:LinuxHub,微信公眾號:Linux愛好者】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

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

    的基礎用法講起,逐步深入到更高級的應用,為你呈現一個全面詳細Makefile使用手冊。 第一:Mak
    的頭像 發(fā)表于 05-11 08:49 ?648次閱讀

    freebsd使用手冊pdf

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

    EMC分析使用手冊

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

    USB設計及使用手冊

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

    DAvE_使用手冊_8 bit

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

    fpga使用手冊

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

    CANopen使用手冊

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

    1602液晶使用手冊

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

    Cadence使用手冊經典

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

    加密芯片使用手冊

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

    Keil軟件使用手冊

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

    STM32固件庫使用手冊

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

    有沒有S32R274的SPE功能詳細使用手冊和例子可以參考呢

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

    JMeter 壓力測試使用手冊中文使用手冊

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

    JMeter壓力測試使用手冊的中文使用手冊

    JMeter壓力測試使用手冊的中文使用手冊
    發(fā)表于 09-08 09:57 ?7次下載
    JMeter壓力測試<b class='flag-5'>使用手冊</b>的中文<b class='flag-5'>使用手冊</b>
    RM新时代网站-首页