跟我一起寫makefile

一、makefile是什麼

makefile是一個文件,它包含了一組規則用來指示make程序如何編譯和鏈接程序。make是一個自動化編譯工具,它可以通過讀取makefile文件來查找依賴關係,自動編譯程序。它可以在工程中進行模塊化編譯,只編譯需要更新的文件,大大節省了編譯時間。

二、makefile的語法

makefile的語法並不是很難,主要包括以下幾個部分:

target1: depend1 depend2
    command1
    command2

target2: depend3 depend4
    command3
    command4

其中,target是要生成的目標文件,depend是目標文件所依賴的文件,command是生成目標文件的命令。

在makefile中,由於每個命令都是一個新的進程,因此每個命令都要以tab鍵開頭,而不能使用空格。

三、makefile的實例

下面是一個簡單的makefile實例:

CC = gcc
CFLAGS = -Wall -g

all: hello

hello: hello.o
    $(CC) $(CFLAGS) -o hello hello.o

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

clean:
    rm -f hello hello.o

這個makefile包含了三個target:all、hello、clean

all是默認的target,當執行make命令時,會自動執行這個target下的命令。

hello是要生成的目標文件,它依賴於hello.o文件,當hello.o文件更新時,才會重新編譯生成hello文件。

clean是為了清除中間文件而設置的target,執行make clean命令時,會刪除生成的目標文件和中間文件。

四、makefile的高級用法

1、變數

在makefile中,可以定義變數來存儲路徑、編譯選項等信息,方便統一管理和修改。

CC = gcc
CFLAGS = -Wall -g

all: hello

hello: hello.o
    $(CC) $(CFLAGS) -o hello hello.o

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

clean:
    rm -f hello hello.o

在上面的makefile中,定義了兩個變數:CC和CFLAGS。CC表示編譯器路徑,CFLAGS表示編譯選項。

2、模式規則

模式規則可以使用變數來簡化targets的規則寫法,它允許多個目標文件使用相同的規則,只需要在規則中使用%表示模式匹配。

CC = gcc
CFLAGS = -Wall -g

all: hello

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

hello: hello.o
    $(CC) $(CFLAGS) -o hello hello.o

clean:
    rm -f hello *.o

在上面的makefile中,使用%o:%c表示所有以.o結尾的文件,都可以使用相同的規則來生成。

3、條件語句

在makefile中,可以使用條件語句,根據不同的條件執行不同的指令。

CC = gcc
CFLAGS = -Wall -g

ifdef DEBUG
    CFLAGS = -Wall -g -DDEBUG
endif

all: hello

hello: hello.o
    $(CC) $(CFLAGS) -o hello hello.o

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

clean:
    rm -f hello hello.o

在上面的makefile中,如果定義了DEBUG變數,則在編譯時增加-DDEBUG選項。

五、總結

本文介紹了makefile的概念、語法和實例,以及makefile的高級用法。通過學習makefile的使用,可以更加高效地進行代碼編譯和管理。

原創文章,作者:NEWRP,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/372190.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
NEWRP的頭像NEWRP
上一篇 2025-04-24 06:40
下一篇 2025-04-24 06:40

相關推薦

  • makefile編寫規則詳解

    一、目標、依賴和命令 makefile中最基本的幾個構成部分就是目標、依賴和命令。目標是我們要生成的文件,依賴是生成目標所需要的文件或者其他目標,命令則是生成目標的具體步驟。 ta…

    編程 2025-04-23
  • OpenWrt Makefile 全方位解析

    一、Makefile的定義和作用 1. Makefile是什麼? Makefile是一個類似於腳本的文件,其中描述了如何通過編譯器和鏈接器來生成應用程序。Makefile文件通常被…

    編程 2025-04-22
  • 深度解析makefile filter-out

    一、filter-out:什麼是filter-out 在makefile中,filter-out函數是過濾掉一個列表中的某些元素。 filter-out函數的語法為: $(filt…

    編程 2025-04-12
  • makefile文件編寫詳解

    一、什麼是makefile文件 makefile文件是用於自動化構建項目的工具,它可以根據指定的規則在一個或多個源文件的基礎上生成目標文件。在makefile文件中,用戶可以定義源…

    編程 2025-02-15
  • 深入探析makefile missing separator

    一、錯誤的解釋 在Linux下,編譯時常見的錯誤信息之一就是makefile missing separator,該錯誤信息常被誤解為缺失了分隔符,導致編譯錯誤。 實際上,這個錯誤…

    編程 2025-02-01
  • makefile 變數深入剖析

    一、makefile 變數概述 makefile 變數是一些被賦值的標識符(Identifier),它們用於儲存各種用到的字元串或者數值。這些變數可以是自己定義的,也可以是系統默認…

    編程 2025-01-16
  • makefile 變數深入剖析

    一、makefile 變數概述 makefile 變數是一些被賦值的標識符(Identifier),它們用於儲存各種用到的字元串或者數值。這些變數可以是自己定義的,也可以是系統默認…

    編程 2025-01-16
  • makefile注釋詳解

    一、makefile注釋符 在makefile中,注釋符為#。在#後面的內容都會被解釋器忽略,即注釋掉。 以下是一個示例,演示了如何使用注釋符進行注釋: # 這是一個makefil…

    編程 2025-01-02
  • makefile列印信息

    makefile是一個常用的自動化編譯工具,通過定義文件依賴關係和構建規則,可以高效地構建軟體。在makefile中,我們可以通過列印信息來幫助調試和了解構建過程中發生的情況。本文…

    編程 2024-12-19
  • Linux Makefile詳細闡述

    一、基礎介紹 Makefile是一個用於管理代碼編譯的腳本文件。它通過定義一系列編譯規則和依賴關係,可以實現代碼文件的自動編譯和安裝。Makefile是一個文本文件,文件名通常為「…

    編程 2024-12-12

發表回復

登錄後才能評論