【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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 在虚拟机上安装XP系统「建议收藏」

    在虚拟机上安装XP系统「建议收藏」WindowsXP番茄家园的安装点击”文件”–>”新建”–>”虚拟机”–>弹出”新建虚拟机向导”的欢迎界面.–>”下一步”配置你的新虚拟机,选择”典型”–>”下一步”选择客户机操作系统–>”MicrosoftWindows”-,版本:WindowsXPProfessional–>”下一…

    2022年8月16日
    3
  • 关于hashlib哈希算法的一些个人笔记

    关于hashlib哈希算法的一些个人笔记摘要算法又称哈希算法、散列算法。它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用16进制的字符串表示)。hashlib提供了常见的摘要算法,具体包括md5、sha1、sha224、sha256、sha512等,我们一般用的比较多是md5。注意加密是单向的。通过hashlib,可以把任意长度的字符串转换成固定长度的加密串,通常我们一般用hexdigest(),也就是…

    2022年6月3日
    45
  • java并发编程之ConcurrentModificationException详解

    java并发编程之ConcurrentModificationException详解

    2021年8月2日
    64
  • C语言常见面试题_嵌入式面试题 c语言

    C语言常见面试题_嵌入式面试题 c语言1.标识符标识符是C程序的最基本组成部分,例如:变量名称、函数名称、数据类型等等,都是一个标识符。标识符的要求是:必须由字母(区分大小写)、数字、下划线组成。而且,标识符的第一个字符不可以是数字。例如:abc—合法_abc123—合法abc555—合法123abc—非法abc$!!—非法下列字符串可以用作C++标识…

    2022年8月28日
    4
  • 矩阵论:向量范数和矩阵范数的区别_矩阵范数的定义

    矩阵论:向量范数和矩阵范数的区别_矩阵范数的定义http://blog.csdn.net/pipisorry/article/details/51030563向量范数0-范数,向量中非零元素的个数。1-范数:,即向量元素绝对值之和,matlab调用函数norm(x,1) 。2-范数:,Euclid范数(欧几里得范数,常用计算向量长度),即向量元素绝对值的平方和再开方,matlab调用函数norm(x,2)。∞-范数:,即所有向量元素绝对值中

    2025年12月8日
    3
  • 手机听筒被灰尘堵塞了如何清洗?[通俗易懂]

    手机听筒被灰尘堵塞了如何清洗?[通俗易懂]手机听筒被灰尘堵塞后,会出现声音变小,甚至有杂音的情况,影响了听筒的正常使用,通话时容易听不清对方的声音。按理来说,灰尘附着在听筒上,只要轻轻一吹就可以解决,但听筒上的灰尘为什么会凝固在听筒上呢?请往下看。手机听筒上顽固灰尘形成的原因手机在非封闭的环境中使用,避免不了会接触到灰尘,而常规手机听筒的表面都是细小的网格,极其容易沾染灰尘。灰尘附着在听筒表面以后,如果及时清理,就会变得很容易,用嘴吹两下,或者将听筒朝下,在手上轻轻拍打两下即可。如果听筒上的灰尘没有及时清理,遇到水性或者油性物质

    2022年4月19日
    594

发表回复

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

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