Makefile语法快速查询

规则

在这里插入图片描述
Makefile里面可能有多个目标,第一个作为默认目标,直接make即可;
规则与目标可以为1对n或n对1
目标可以为伪目标.PHONY,仅仅为了完成一个操作
.PHONY: clean 放在规则的最前面

目标依赖

make是根据时间戳来判断一个规则中的目标依赖文件是否有更新,有则重新编译。
在这里插入图片描述
若依赖的头文件过多:
可以使用gcc -M 命令自动生成头文件依赖关系:gcc -M hello.c

变量

变量赋值
可以在Makefile中定义一个变量val,使用使用 $(val) 或 ${val} 的形式去引用它。
条件赋值:?= 若之前被赋值过则不赋值;追加赋值:+=

val_a := $(a) 立即变量:解析阶段就直接赋值
val_b = $(b) 延迟变量:等到实际使用这个变量时才赋值

自动变量
$@:目标
$^:所有目标依赖
$<:目标依赖列表中的第一个依赖
$?:所有目标依赖中被修改过的文件

变量替换
SRC使用指定字符串替换掉变量中的字符串
OBJ使用通配符%进行模式匹配替换
在这里插入图片描述
环境变量
make在解析Makefile中还会引入一些系统环境变量
override修饰符:一个变量可以在命令行中重新被赋值,但是加了override后则不能被覆盖:
在这里插入图片描述

函数

函数和参数列表之间要用空格隔开,多个参数之间使用逗号隔开。
如果在参数中引用了变量,变量的引用建议和函数引用使用统一格式:
要么是一对小括号,要么是一对大括号。

文本处理函数

接口含义
$(subst old,new,text)将字符串text中的old替换为new
OBJ = $(patsubst %.c,%.o, $(SRC))模式替换
STR = $(strip $(STR))去空字符函数,多余的空格、tab转换为1个空格
$(findstring FIND, IN)字符串IN中查找“FIND”字符串,找到则返回FIND
$(filter PATTERN…,TEXT)返回字符串TEXT中所有符合PATTERN模式的单词
SRC = $(filter-out%.c, $(FILE))与filter函数相反
$(sort LIST)字符串排序
$(word N,TEXT)按照指定的数目N取单词,从1开始
$(words TEXT)统计单词数目

文件名处理函数
dir取文件名;notdir取文件名;suffix取后缀;basename取前缀
$(addsuffix SUFFIX, NAMES…) 加后缀
$(addprefix PREFIX, NAMES…) 加前缀
$(join $(LIST1), $(LIST2)) 字符串连接
$(wildcard PATTERN) 列出所有符号匹配模式的文件

循环函数
$(foreach VAR,LIST,TEXT)
把LIST中使用空格分割的单词依次取出并赋值给变量VAR,然后执行TEXT表达式
例如:srcs = $(foreach d, $(dirs), $(wildcard $(d)/*.c))
自动搜索各子目录下的源文件

判断函数
$(if CONDITION,THEN-PART[,ELSE-PART])
CONDITION如果非空则为真,执行 THEN-PART部分;
否则,如果有ELSE-PART部分,则执行ELSE-PART部分

shell函数
在Makefile中运行shell命令,和反引号 `` 具有相同的功能
current_path = $(shell pwd)

另外有
使用ifeq、ifneq、ifdef、ifndef 等关键字来进行对字符串的条件判断,但是这几个不是函数

编译器中的进程文件

● cpp:预处理器
● ccl:编译器
● as:汇编器
● ld:链接器
● ar:静态库制作工具 ar -x 解包 ar -cr 打包

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值