首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

Makefile 語法完整指南:從基礎規則到進階技巧

     編輯:關於C語言

Makefile 核心語法結構

Makefile 由一組依賴關係與構建規則組成,是自動化編譯的核心配置文件。其基本格式為:

目標: 依賴文件列表
    編譯命令

以下範例展示一個典型的多文件專案構建流程:

myapp: main.o 2.o 3.o
    gcc -o myapp main.o 2.o 3.o

main.o: main.c a.h
    gcc -c main.c

2.o: 2.c a.h b.h
    gcc -c 2.c

3.o: 3.c b.h c.h
    gcc -c 3.c

執行 make 時,它會根據時間戳判斷哪些目標需要重建,僅編譯變更過的文件,大幅提升構建效率。

常用 make 命令參數

參數說明
-k遇到錯誤繼續編譯其他目標
-n僅輸出將執行的命令,不實際執行(乾跑模式)
-f指定 Makefile 文件名(預設為 Makefile 或 makefile)

註釋與巨集(宏)定義

使用 # 開頭表示註釋。巨集定義語法為 MACRONAME=value,引用方式為 $(MACRONAME) 或 ${MACRONAME}。

內建特殊巨集

  • $? — 當前目標中比目標更新的依賴文件列表
  • $@ — 當前目標名稱
  • $< — 第一個依賴文件名稱
  • $* — 不含副檔名的第一個依賴文件名稱

多目標管理與特殊符號

建議在 Makefile 開頭定義 all 為預設目標:

all: myapp

長命令跨行使用反斜線 \ 續行。兩個關鍵前綴符號:

  • - — 忽略該命令的錯誤返回碼
  • @ — 抑制命令本身的輸出(常搭配 echo 使用)

Shell 命令間若有順序依賴,使用 && 連接。

內建規則、後綴與模式規則

Make 內建了常見編譯規則(如 .c.o),可透過模式規則自定義:

%.cpp: %.o
    $(CC) -xc++ $(CFLAGS) -I$(INCLUDE) -c $<

靜態庫(歸檔文件)處理

$(MYLIB): $(MYLIB)(2.o) $(MYLIB)(3.o)
    $(AR) $(ARFLAGS) $@ $<

子目錄遞歸構建

mylib.a:
    (cd mylibdirectory; $(MAKE))
# 或
mylib.a: mydir/2.o mydir/3.o
    ar -rv mylib.a $?

自動生成依賴關係

使用 GCC 選項自動產生頭文件依賴:

gcc -MM main.c 2.c 3.c

輸出可直接包含於 Makefile 中,確保頭文件變更觸發重編譯。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved