今天給大家介紹一個(gè)簡(jiǎn)單實(shí)用的Makefile模板,也可以當(dāng)做學(xué)習(xí)Makefile核心內(nèi)容的范例,里面都有詳細(xì)的注釋,清晰明了。
這個(gè)Makefile主要解決以下需求:
###################################################################################### # 需求: #1.編譯輸出的所有文件均放在一個(gè)output目錄,.o文件的相對(duì)目錄應(yīng)與源碼的位置保持一致; #2.需要生成每個(gè).c文件的頭文件依賴,當(dāng).c文件為xxxx.c時(shí),.o文件名為xxx.o,頭文件依賴文件名為.xxx.o.d ######################################################################################
廢話不多說,直接上內(nèi)容:
#######################################################################################################
# 需求:
#1.編譯輸出的所有文件均放在一個(gè)output目錄,.o文件的相對(duì)目錄應(yīng)與源碼的位置保持一致;
#2.需要生成每個(gè).c文件的頭文件依賴,當(dāng).c文件未xxxx.c時(shí),.o文件名為xxx.o,頭文件依賴文件名為.xxx.o.d
#######################################################################################################
# 定義輸出目錄
OUTPUT := output
OUTPUT_BIN := $(OUTPUT)/test
# 定義.c文件列表
SRC-C += ./src/main.c
SRC-C += ./src/test1/test1.c
SRC-C += ./src/test2/test2.c
SRC-C += ./src/test3/test3.c
# 求出.o文件列表
SRC-O += $(patsubst %.c, $(OUTPUT)/%.o, $(SRC-C))
# 求出.o文件的頭文件依賴列表 # output/./src/test1/test1.o ==> output/./src/test1/.test1.o.d
SRC-O-DEPS += $(foreach n, $(SRC-O), $(dir $(n)).$(notdir $(n).d))
# Entry for Makefile
all: info gen_output gen_bin
@echo
@echo Generate $(OUTPUT_BIN) done !
@echo
# Show some variables
info:
@echo
@echo SRC-C=$(SRC-C)
@echo SRC-O=$(SRC-O)
@echo SRC-O-DEPS=$(SRC-O-DEPS)
@echo
# Generate output bin
gen_bin: $(SRC-O) $(SRC-O-DEPS)
touch $(OUTPUT_BIN)
# Create .o files
$(OUTPUT)/%.o:
test -d $(dir $@) || mkdir -p $(dir $@)
touch $@
# Create .o dependent files
$(OUTPUT)/.%.o.d:
touch $@
# Create output path when it's not exist !
gen_output:
test -d $(OUTPUT) || mkdir -p $(OUTPUT)
# Clean builded output files
clean:
rm -rf $(OUTPUT)
.PHONY: info gen_output clean
工程的文件目錄結(jié)構(gòu)如下圖:
編輯
工程目錄執(zhí)行make即可開始編譯,執(zhí)行make clean即可清除編譯文件。
編輯
值得注意的是,Makefile里面都是模擬生成.o .o.d .bin等文件,在實(shí)際工程運(yùn)用中,需要根據(jù)自己的實(shí)際情況加以修改。
使用過程如有發(fā)現(xiàn)問題,可在評(píng)論席提出,期待您的寶貴建議,謝謝。
延伸閱讀:
1.【Linux + Makefile】十分鐘教你學(xué)會(huì)Makefile的FORCE
\2. 【Linux + Makefile】Makefile的高階用法:解決C文件包含的頭文件修改了,但C文件不重新編譯的問題
-
模板
+關(guān)注
關(guān)注
0文章
108瀏覽量
20545 -
Makefile
+關(guān)注
關(guān)注
1文章
125瀏覽量
19158
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論