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应用开发完全手册》韦东山
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具