【Makefile】简单实用的Makefile模板来了

描述

今天给大家介绍一个简单实用的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文件不重新编译的问题
 

 审核编辑:汤梓红
 
打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分