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

多目錄專案 Makefile 寫法實戰:遞迴建構與模組化編譯

     編輯:關於C語言

專案結構

project/
├── Makefile          # 主 Makefile
├── src/              # 模組 A
│   ├── guo.c guo.h
│   ├── zhi.c zhi.h
│   ├── yuan.c yuan.h
│   └── Makefile
└── exit/             # 模組 B
    ├── qian.c qian.h
    ├── ru.c ru.h
    ├── shi.c shi.h
    └── Makefile

子目錄 Makefile 範本 (src/Makefile)

.PHONY: all
CC = gcc

all: guo.o zhi.o yuan.o

guo.o: guo.c
	$(CC) -c guo.c
	cp guo.o ../

zhi.o: zhi.c zhi.h
	$(CC) -c zhi.c
	cp zhi.o ../

yuan.o: yuan.c yuan.h
	$(CC) -c yuan.c
	cp yuan.o ../

clean:
	rm -f *.o

主 Makefile

feifei: guo.o zhi.o yuan.o qian.o ru.o shi.o
	gcc guo.o zhi.o yuan.o qian.o ru.o shi.o -o feifei

guo.o zhi.o yuan.o:
	cd ./src && $(MAKE)

qian.o ru.o shi.o:
	cd ./exit && $(MAKE)

clean:
	rm -f *.o feifei

關鍵技巧

  1. 遞迴 make:cd subdir && $(MAKE) 將編譯委派給子目錄
  2. 物件檔上移:子目錄編譯後 cp *.o ../ 供主目錄連結
  3. 單一 main 原則:全專案只能有一個 main(),否則連結錯誤
  4. 相依宣告:.o 目標依賴對應 .c/.h,修改頭檔自動重編

進階改良建議

  • 使用 VPATH 或 vpath 避免複製 .o 檔
  • 引入 include ../common.mk 共享編譯旗標
  • 自動產生相依:gcc -MM 生成 .d 檔
  • 平行建構:make -j4

作者:guozhiyuan20095318

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