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

【Linux + Makefile】简单实用的Makefile模板来了今天给大家介绍一个简单实用的Makefile模板,也可以当做学习Makefile核心内容的范例,里面都有详细的注释,清晰明了。这个Makefile主要解决以下需求:#######################################################################################需求:#1.编译输出的所有文件均放在一个outp…

大家好,又见面了,我是你们的朋友全栈君。

今天给大家介绍一个简单实用的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

工程的文件目录结构如下图:

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

工程目录执行make即可开始编译,执行make clean即可清除编译文件。

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

值得注意的是,Makefile里面都是模拟生成.o .o.d .bin等文件,在实际工程运用中,需要根据自己的实际情况加以修改。

使用过程如有发现问题,可在评论席提出,期待您的宝贵建议,谢谢。


延伸阅读:

1.【Linux + Makefile】十分钟教你学会Makefile的FORCE

2. 【Linux + Makefile】Makefile的高阶用法:解决C文件包含的头文件修改了,但C文件不重新编译的问题

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/130544.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • npm卸载安装

    npm卸载安装npm安装卸载命令利用npm安装xxx模块到当前命令行所在目录:npminstallxxx利用npm安装全局模块xxx:npminstall-gxxx安装但不写入package.json:npminstallxxx安装并写入package.json的”dependencies”中:npminstallxxx–save安装并写入package.json的”d…

    2025年7月27日
    3
  • CRC16 的生成及校验原理「建议收藏」

    CRC16 的生成及校验原理「建议收藏」参考:https://blog.csdn.net/niepangu/article/details/45499383计算CRC的过程,就是用一个特殊的“除法”,来得到余数,这个余数就是CRC。&#1

    2022年8月4日
    5
  • 亚马逊云基础架构:一场从未停歇的技术创新革命[通俗易懂]

    亚马逊云基础架构:一场从未停歇的技术创新革命[通俗易懂]2022年4月20日,线上等你!

    2022年7月20日
    20
  • 解决Ubuntu18.04中启动kworker等占用系统cpu过高问题[通俗易懂]

    解决Ubuntu18.04中启动kworker等占用系统cpu过高问题[通俗易懂]提要这个问题困扰我好久,真的很烦人,一般网上的解决方式也不是特别好用。后来说一下我的解决方案正文刚装的Ubuntu18.04出现硬盘短时间内被占满,通过查询可以看出在/var/log/下出现两个超级打的日志kern.log和syslog我的盘符分了100G一晚上就占用满了,我通过echo””>kern.log和echo””>syslog然后tail-f查看日志,…

    2022年9月24日
    2
  • Redis 4.x/5.x IDOR漏洞复现[通俗易懂]

    Redis 4.x/5.x IDOR漏洞复现[通俗易懂]Redis4.x/5.x未授权访问漏洞Redis未授权访问在4.x/5.0.5以前版本下,我们可以使用master/slave模式加载远程模块,通过动态链接库的方式执行任意命令。漏洞复现最近碰到ctf的题目是通过ssrf和redis的未授权访问打入内网getshell,想着用docker复现以下此漏洞。拉取环境开启环境后,如图使用redis-cli-hyour-ipj即可连接redis数据库,并且可以清空所有数据,即有未授权访问漏洞使用poc实现远程命令执行先将下载好的poc目录下

    2022年6月6日
    49
  • 通达OA工作流数据报表二次开发版

    通达OA工作流数据报表二次开发版此模块除具备工作流——数据报表所有功能外,新加入的功能包括:1:查询条件自带可查询未完成的流程;2:查询条件可设置查询所有子流程的字段;3:报表可显示流程当前处理人,并且点击每列可弹出当前流程表单详情。此模块支持最新2015版本,需要其他功能可定制开发。QQ:524668994

    2022年6月23日
    35

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号