Linux下 Makefile文件基本语法二

本文详细介绍了Makefile中的伪目标,如clean用于清理中间文件,以及条件判断关键字ifeq、ifneq、ifdef、ifndef的使用。此外,还探讨了Makefile内置函数的应用,如subst、patsubst、dir、notdir、foreach和wildcard,这些工具增强了Makefile的灵活性和功能性。
摘要由CSDN通过智能技术生成

本文继续上一篇关于 Makefile 文件内容的介绍。上一篇文章如下:

Linux下 Makefile 基本语法_凌雪舞的博客-CSDN博客

一.  Makefile 

上一篇文章介绍了 Makefile基本语法中的变量,模式规则,自动化变量。这里继续介绍 Makefile 的另外一些语法。包括 Makefile 的伪目标,条件判断,函数调用。

1.  Makefile 伪目标

Makefile 有一种特殊的目标——伪目标。不像真正的目标那样会生成一个目标文件。

典型的伪目标是 Makefile 中用来清理编译过程中中间文件的 clean 伪目标。

一般格式如下:

.PHONY: clean   <-- 这句没有也行, 但是最好加上
clean:
    -rm -f *.o

执行伪目标的效果等于执行了某一个动作, 并不产生目标文件。

2.  Makefile 条件判断

C 语言中我们通过条件判断语句来根据不同的情况来执行不同的分支, Makefile 也支持条件判断。
条件判断的关键字包括:ifeq,ifneq,ifdef,ifndef。

其中ifeq 与 ifneq 成对,ifdef 与 ifndef 成对使用。前者判断是否相等,后者判断变量是否否定义。

语法有两种如下:( ifneq 与 ifeq 用法相似,只是意思相反。)
ifeq 条件语句
    条件成立时要做的事情
else
    条件不成立时要做的事情
endif

ifdef 语法格式如下:(ifndef 与 ifdef 用法相似,只是意思相反。)

ifdef <变量名>
如果“变量名”的值非空,那么表示表达式为真,否则表达式为假。

3. Makefile 函数的使用

Makefile 支持函数,类似 C 语言一样, Makefile 中的函数是已经定义好的,我们直接使用,
不支持我们自定义函数。。 make 所支持的函数不多。
函数的用法如下:
$(<function> <arguments>)
或是
${<function> <arguments>}
参数集合是函数的多个参数,参数之间以逗号  “,”  隔开,函数名和参数之间以 “空格” 分隔开。

几种常用的函数如下:

(1)  函数 subst :  用来完成字符串替换

调用形式如下:

$(subst <from>,<to>,<text>)   //此函数的功能是将字符串<text>中的<from>内容替换为<to>

(2) 函数 patsubst:  用来完成模式字符串替换

使用方法如下:

$(patsubst <pattern>,<replacement>,<text>)

(3)  函数 dir: 用来获取目录.

使用方法如下: (//从文件名序列<names>中提取出目录部分,返回值是文件名序 <names>的目录部分)

$(dir <names…>) 

(4)  函数 notdir : 去除文件中的目录部分,也就是提取文件名,用法如下:

$(notdir <names…>)

(5)  函数 foreach :用来完成循环,用法如下:

$(foreach <var>, <list>,<text>)
把参数<list>中的单词逐一取出来放到参数<var>中,然后再执行<text>所
包含的表达式。每次<text>都会返回一个字符串,循环的过程中,<text>中所包含的每个字符串
会以空格隔开,最后当整个循环结束时,<text>所返回的每个字符串所组成的整个字符串将会是
函数 foreach 函数的返回值。

(6)  函数 wildcard:    通配符“%”只能用在规则中,只有在规则中它才会展开,如果在变量定义和函数使用时, 通配符不会自动展开,这个时候就要用到函数 wildcard,使用方法如下:

$(wildcard PATTERN…)

 例如如下:

$(wildcard *.c)   //用来获取当前目录下所有的.c 文件,类似“%”。

关于 Makefile 中的内容,以后有机会再在文章中补充。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值