Makefile參考樣例3 多個資料夾 c的編譯

2021-07-29 11:19:37 字數 1550 閱讀 7987

優點:**簡潔,容易解理,能自動檢查標頭檔案依賴關係,支援不同資料夾下面有相同的檔名的.c檔案;

缺點:所有編譯的中間檔案與原始碼在同一路徑,會造成一些檔案汙染,好在make clean可以乾淨地清除這些中間檔案;

**如下:

#這是乙個makefile的樣例,用於編譯多資料夾,多檔案的編譯

#編譯工具鏈

cc = gcc

cxx = g++

ld = $(cc)

as = nasm

#編譯選項

asflags = -m32

cflags = -m32 -wall $(incdir)

cxxflags = -m32 -wall $(incdir)

ldflags = -m32 -static

#定義輸出檔名

target = main.exe

#定義原始碼目錄

srcdir = src \

src/dir1 \

src/dir2 \

src/dir2/sub1 \

src/dir2/sub2

#定義包含目錄

incdir = $(foreach dir,$(srcdir),-i$(dir))

#定義附加依賴庫

inclib = -lpthread

#遍歷所有dir,並搜尋該dir下面的所有.c檔案

allsrc = $(foreach dir,$(srcdir),$(wildcard $(dir)/*.c))

#把所有的.c替換為.o

allobj = $(allsrc:%.c=%.o)

#把所有的.c替換為.d

alldep = $(allsrc:%.c=%.d)

#生成.d的規則

%.d: %.c

@echo generating $@...

@$(cc) -mm -mt "$($@

#生成.o的規則

%.o: %.c

@echo compiling $<...

@$(cc) $(cflags) -c $< -o $@

#如果不是第1次呼叫make,則包含所有.d檔案

ifneq ($(makelevel), 0)

include $(alldep)

endif

#宣告虛擬目標

.phony: init clean

init: $(alldep)

@$(make) -s $(target)

ifneq ($(makelevel), 0)

$(target): $(alldep) $(allobj)

@echo linking target...

@$(ld) $(ldflags) -o $@ $(allobj) $(inclib)

@echo link done!

endif

clean:

@rm -rf $(alldep) $(allobj) $(target)

@echo clean done.

C 編譯多個檔案makefile

逐步編譯 g c apcluster.cppapcluster.h 生成apcluster.o 中間檔案 g c example.cppapcluster.h 生成example.o中間檔案 g o main apcluster.o example.o makefile gnu的make很強大,它可...

Makefile高階技巧多個檔案編譯

includes i home linux i i usr include 新增鏈結的標頭檔案所在目錄 ext cc opts dext mode rtm cc opts duse rtmodel 定義巨集 cflags o cflags ext cc opts cflags rtm cc opts...

三 Makefile 生成多個目標檔案

一 makefile規則 二 makefile案例 多個檔案生成乙個目標檔案 三 makefile 生成多個目標檔案 四 makefile包含 標頭檔案和庫檔案 我們工作的時候經常會遇到 要多寫幾個不同的測試案例,去測試不同的功能,這個時候 需要編譯多個 可執行檔案。假如我們的目錄下有三個原檔案需要...