Makefile学习笔记

基本格式

target: dependence
	command
# 冒号之前是目标名,冒号之后是依赖
# 每个command独占一行,每行之前必须有一个tab

.phony: clean
	clean-command
# 以.phony修饰,使make不会将clean识别为实际存在的文件。

特殊变量

%.o : %.c 
	gcc -c -o $@  $< 

# $@表示当前规则的目标名
# $^表示所有依赖
# $<表示第一个依赖

变量定义方式

A  =  xxx    # 延时变量,相当于是一种数学中的函数关系,会受到等号右边内容的变化的影响
B  ?= xxx    # 延时变量,只有第一次定义时赋值才成功;如果曾定义过,此赋值无效 
C  := xxx    # 立即变量
D += yyy 	 # 沿用变量类型,如果 D在前面是延时变量,那么现在它还是延时变量;
# 如果 D在前面是立即变量,那么现在它还是立即变量 

常用函数

字符串处理函数

# 以下所有函数在使用时,需要注意是否有逗号隔开,以及逗号的位置

# substitute,将text中每一处from替换为to
$(subst from,to,text)

# 和功能一样,只是from使用了格式串来表示
$(patsubst pattern,replacement,text)

# 去掉string中前导和结尾的空格,并将字符串中连续多空格处替换为单空格
$(strip string)

# 在字符串in中寻找find,若找到则返回find,否则为空
$(findstring find,in)

# 从text中筛选符合pattern的部分并保留,返回保留内容
$(filter pattern...,text)

# 从text中筛选符合pattern的部分并从中剔除,返回剔除后内容
$(filter-out pattern...,text)

# 按字典序排序并返回
$(sort list)

文件名函数

# 只留下文件的路径
$(dir names...)

# 只留下文件名
$(notdir names...)

# 只留下文件后缀(最后一个后缀,即a.c.o会返回.o)
$(suffix names...)

# 取出文件basename
$(basename names...) 

# 给文件名加上扩展名(后缀)
$(addsuffix suffix,names...)

# 给文件加上路径(前缀)
$(addprefix prefix,names...)

# 取出当前路径下符合pattern的文件名
$(wildcard pattern)

其他函数

# for循环替换,foreach是关键字,表示从list中逐一取出内容赋值给var,并都用text来替换,此语句返回替换后的list
$(foreach var,list,text)

# if条件判断,若condition去除前导和结尾的空格后扩展非空,则计算then-part并返回,否则计算else-part的值并返回
# 如果else-part不存在,则返回空
$(if condition,then-part[,else-part])

# 查询变量的定义状态,以及在何处定义,返回诸如“undefined”之类的字符串
$(origin variable)

# 在shell中命令command,可传递arguments作为参数,返回shell执行结果(以空格隔开的list)
$(shell command arguments)

内容参考:《嵌入式Linux应用开发完全手册》韦东山

posted @   ZenonX  阅读(35)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
点击右上角即可分享
微信分享提示