今天給大家介紹一個簡單實用的Makefile模板,也可以當做學習Makefile核心內容的范例,里面都有詳細的注釋,清晰明了。
這個Makefile主要解決以下需求:
###################################################################################### # 需求: #1.編譯輸出的所有文件均放在一個output目錄,.o文件的相對目錄應與源碼的位置保持一致; #2.需要生成每個.c文件的頭文件依賴,當.c文件為xxxx.c時,.o文件名為xxx.o,頭文件依賴文件名為.xxx.o.d ######################################################################################
廢話不多說,直接上內容:
#######################################################################################################
# 需求:
#1.編譯輸出的所有文件均放在一個output目錄,.o文件的相對目錄應與源碼的位置保持一致;
#2.需要生成每個.c文件的頭文件依賴,當.c文件未xxxx.c時,.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
工程的文件目錄結構如下圖:
編輯
工程目錄執行make即可開始編譯,執行make clean即可清除編譯文件。
編輯
值得注意的是,Makefile里面都是模擬生成.o .o.d .bin等文件,在實際工程運用中,需要根據自己的實際情況加以修改。
使用過程如有發現問題,可在評論席提出,期待您的寶貴建議,謝謝。
延伸閱讀:
1.【Linux + Makefile】十分鐘教你學會Makefile的FORCE
\2. 【Linux + Makefile】Makefile的高階用法:解決C文件包含的頭文件修改了,但C文件不重新編譯的問題
-
模板
+關注
關注
0文章
108瀏覽量
20560 -
Makefile
+關注
關注
1文章
125瀏覽量
19181
發布評論請先 登錄
相關推薦
評論