Makefile学习笔记

(一)目标文件、依赖文件和执行规则

Makefile傻瓜教程-菜鸟笔记 (coonote.com)https://www.coonote.com/linux-note/makefile-simple-tutorial.html

.PHONY: 当目标文件已存在时,忽略,继续执行规则。

(二)变量赋值

(1)+=

字符串拼接,拼接只看当前值,不会用最终值替换。

(2)=和:=

=    当右侧存在变量时,一直搜索到文件末尾,用最终结果替换变量

:= 当右侧存在变量时,按照执行到该行之前的结果进行替换

(三)一些常用函数

(1) $(shell shell_cmd)

    Makefile中使用shell命令

(2) $(realpath dirname)

    返回一个绝对路径

(3) $(wildcard *.c)

    通配符,显示指定路径下指定类型的所有文件,也可以用于显示单个文件。

(4) $(patsubst pattern,replacement,text)

    字符串替换,将text中的pattern替换成replacement

(5) $(foreach var,list,text)

    循环处理,将list中的参数逐一取出赋值到var然后执行text中的规则,返回字符串

(6) $(if <condition>,<then part>,<else part>)

    通过if判断选择返回then part或者else part运算结果

(7) $(basename <names>)

    取每个变量的前缀,对应suffix,取后缀

(8) $(addsuffix <suffix>,<names>)

    为每个变量加后缀,对应addprefix,加后缀

(9) $(notdir <names>)

    把展开的文件的路径去掉,只保留文件名

(10) $(call function,,,)

    调用自定义函数,并传入参数。function一般通过define endef的形式进行定义

(四)if分支语句

ifeq($(var),value)

...

else ifeq($(*),*)

...

else

...

endif

(五) $$和$

    当在Makefile中执行shell命令时,如果遇到$,则认为是一个变量,后面若是Makefile中的变量则直接进行替换,如果后面是依然是$(也就是遇到$$),那么按照字符串处理,这样就会传递给shell去执行,shell会用shell变量进行替换。

    综上,Makefile中遇到$var,将用Makefile中的变量var进行值替换,如果遇到$$var,则用shell中的变量var进行替换。

(六) 一些$指代

$@: 当前目标

$<: 第一个依赖

$?: 比目标新的所有依赖

$^: 所有依赖

$*: 匹配符%匹配的部分

(七) 匹配符%

(16条消息) Makefile中的匹配符%_忘尘~的博客-CSDN博客_makefile中的%

(八)构建规则前加@和-

构建规则前加@表示直接运行规则,不再将规则打印出来;不加-时,运行出错会直接退出,加上-运行出错会继续执行下一条指令。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值