乙個通用的makefile(一)

2022-06-15 18:54:16 字數 2024 閱讀 9643

最近在編寫android編譯系統時,需要遍歷每乙個目錄下每乙個資料夾下的makefile,網上的方法有些繁瑣 ;就直接貼上自己遍歷子目錄深度為1;(for  temporary)(之後會繼續更新)

下面是我的乙個簡單例項工程:

資料夾目錄層次:

#獲取當前目錄下的子目錄名字

2 subdir = $(shell ls -l | grep ^d | awk''

)34.phony : all clean $ null56

all: $

7$ : null

8make -c $@ clean

9make -c $@

1011 #make clean可以直接去掉各層目錄下的*.o檔案,而在android編譯系統中會直接刪除out路徑就可以了

12clean:

13find ./ -name '

*.o' | xargs -i{} rm -f {}

14null:

15#:為空語句

16 @:

1 #pwd = "

shell pwd

"2 cc := gcc

3#shell pwd是比較好一點的

4 inc_dir := $(shell pwd)/inc/

5 src_dir := $(shell pwd)/src/

6 obj_dir := $(shell pwd)/obj/

7 bin_dir := $(shell pwd)/bin/

8 lib_dir := $(shell pwd)/lib/910

#目標檔名

11 target := $(bin_dir)/main

1213

14 cflags := -g

15 cflags += -wall

16 cflags += -d_fortify_source=2

1718

19 #patsubst 是替換萬用字元,會把第乙個%.c替換成第二個引數的%.c,

20#wildcard 是把指定目錄 $(src_dir)下面的.c檔案全部展開

21#notdir 是把展開的檔案去掉路徑資訊

22 sources := $(patsubst %.c,%.c,$(notdir $(wildcard $(src_dir)/*

.c))) \

2324

objects := $(addprefix $(obj_dir)/, $(sources:.c=.o))

2526

27.phony : clean all $(target) $(objects)

2829

incpaths := \

30-i. \

3132

libdirs := \

33-l. \

3435

libs := \

36-lpthread \

3738

$(target) : $(objects)

39@mkdir -p $(lib_dir) $(bin_dir) 2> /dev/null

40$(cc) $(cflags) -o $@ $(objects)

41$(objects) : $(obj_dir)/%.o : $(src_dir)/%.c

42@mkdir -p $(obj_dir) 2> /dev/null

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

4445

all: $(objects) $(target)

4647

clean:

48find ./ -name '*.*.swp' | xargs -i{} rm -f {}

49rm -f $(objects) $(target)

reference:

乙個通用Makefile的編寫

我們在linux環境下開發程式,少不了要自己編寫makefile,乙個稍微大一些的工程下面都會包含很多.c的原始檔。如果我們用gcc去乙個乙個編譯每乙個原始檔的話,效率會低很多,但是如果我們可以寫乙個makefile,那麼只需要執行乙個make就ok了,這樣大大提高了開發效率。但是makefile的...

乙個通用的makefile詳解

一般整個工程的makefile分為3類 1.頂層目錄的makefile 2.頂層目錄的makefile.build 3.各級子目錄的makefile 1 頂層目錄的makefile 它除了定義obj y來指定根目錄下要編程序式去的檔案 子目錄外,主要是定義工具鏈 編譯引數 鏈結引數 就是檔案中用ex...

編寫乙個簡單通用的makefile

author 李超 date 2012 05 06 縱然makefile 的規則還是相當多的,編寫乙個大規模的軟體,良好的 makefile 架構是方便維護程式編譯的關鍵。學習 makefile 的時間週期還是比較長的,為了寫出規範的 需要在很短的時間內編寫乙個 makefile 這裡給給出乙個 m...