多目錄下多檔案 makefile編寫

2021-09-06 23:22:44 字數 2196 閱讀 7262

前面已經分享了單目錄項下多檔案的makefile的編寫,現在來看看多目錄下多檔案makefile的編寫;

在做專案時,一般檔案都會分幾個目錄來存放;基本的是  include/  bin/ src/ obj/ lib/ tools/,這幾個檔案;我先說下我的檔案存放目錄,用ls -r可以檢視到所有檔案:./include/common.h    ./src/main.c    ./src/printstatus.c  就三個檔案,其中*.c 檔案都依賴於 *.h檔案;

同樣的先上第一版makefile:

[cpp]view plain

copy

cc=gcc  

objects=obj/main.o obj/printstatus.o  

bin/main:$(objects)  

$(cc) -o bin/main $(objects)  

obj/main.o:src/main.c include/common.h  

$(cc) -o obj/main.o -c src/main.c -iinclude  

obj/printstatus.o:src/printstatus.c include/common.h  

$(cc) -o obj/printstatus.o -c src/printstatus.c -iinclude  

clean:  

rm -rf $(objects) bin/main  

上面的makefile就是gcc命令的拼湊起來的,下面來分享下比較通用的多目錄下的makefile;

在看多目錄的makefile時,先來理解下幾個函式和變數;

函式:wildcard 這是擴充套件萬用字元函式,功能是展開成一列所有符合由其引數描述的文 件名,檔案間以空格間隔;比如:羅列出src下的所有.c檔案:$(wildcard $/*.c)

patsubst 這是匹配替換函式, patsubst ( 需要匹配的檔案樣式,匹配替換成什麼檔案,需要匹配的原始檔)函式。比如:用src下的*.c替換成對應的 *.o檔案存放到obj中:$(patsubst  %.c, $/%.o, $(notdir $(source)))

notdir 這是去除路徑函式,在上面patsubst函式中已經使用過,去除source中檔案的所有目錄,只留下檔名;

變數:

$@:表示目標檔案;一般是在規則中這麼用:gcc  -o $@  $(object);

$<:表示第乙個依賴檔案;在規則中使用:gcc -o $@ -c $< ;其實這個時候就是每個依賴檔案生成乙個目的檔案;

第二版makefile

[cpp]view plain

copy

#把所有的目錄做成變數,方便修改和移植   

bin = ./bin  

src = ./src  

inc = ./include  

obj = ./obj  

#提前所有原始檔(即:*.c檔案)和所有中間檔案(即:*.o)  

source = $(wildcard $/*.c)  

object = $(patsubst %.c,$/%.o,$(notdir $))  

#設定最後目標檔案  

target = main  

bin_target = $/$  

cc = gcc   

cflags = -g -wall -i$   

#用所有中間檔案生成目的檔案,規則中可以用 $^替換掉 $  

$:$  

$(cc) -o $@ $  

#生成各個中間檔案  

$/%.o:$/%.c   

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

.phony:clean  

clean:  

find $(obj) -name *.o -exec rm -rf {} \; #這個是find命令,不懂的可以查下資料  

rm -rf $(bin_target)  

這個makefile的好處就是通用性,裡面不涉及到具體的檔名,當你往src目錄中新增新檔案時,可以不需要修改makefile,所以這是個非常好的工具;

單目錄下多檔案 makefile編寫

makefile很久就接觸過了,但是一直沒怎麼深入的去學習和總結 在專案中我也只是看看makefile或者修改部分語句,全部自己動手寫的話還真沒有 知識在於沉澱,這句說的非常好,所以現在把自己理解的東西,記錄下來,以便後面查閱 這篇blog要分享的是在單目錄下多檔案的makefile編寫,首先說明當...

單目錄下多檔案 makefile編寫

makefile很久就接觸過了,但是一直沒怎麼深入的去學習和總結 在專案中我也只是看看makefile或者修改部分語句,全部自己動手寫的話還真沒有 知識在於沉澱,這句說的非常好,所以現在把自己理解的東西,記錄下來,以便後面查閱 這篇blog要分享的是在單目錄下多檔案的makefile編寫,首先說明當...

makefile實現對多檔案 多目錄的操作步驟

makefile實現對多檔案 多目錄的操作步驟 僅作個人複習筆記,以備後查。首先 建立乙個目錄 test 並建立子目錄 sub test 目錄新建檔案 a.c b.c sub子目錄新建檔案 sa.c sb.c 內容都比較 簡單,因為簡單,所以不列出來了。詳細見下面操作步驟 root ubuntu h...