優點:**簡潔,容易解理,能自動檢查標頭檔案依賴關係,支援不同資料夾下面有相同的檔名的.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包含 標頭檔案和庫檔案 我們工作的時候經常會遇到 要多寫幾個不同的測試案例,去測試不同的功能,這個時候 需要編譯多個 可執行檔案。假如我們的目錄下有三個原檔案需要...